SET NOCOUNT ON
CREATE TABLE #temp_table
(
hm VARCHAR(5)
)
INSERT #temp_table VALUES('8:30')
INSERT #temp_table VALUES('5:01')
INSERT #temp_table VALUES('12:59')
INSERT #temp_table VALUES('7:20')
SET NOCOUNT OFF
SELECT
CONVERT(VARCHAR, SUM(DATEDIFF(ss, '1900-01-01 00:00', CONVERT(DATETIME, hm)))/3600) +
':' +
CONVERT(VARCHAR, (SUM(DATEDIFF(ss, '1900-01-01 00:00', CONVERT(DATETIME, hm)))%3600)/60)
FROM
#temp_table
DROP TABLE #temp_table
-------------------------------------------------------------
33:50
(1 row(s) affected)
SET NOCOUNT ON
CREATE TABLE strip_t
(
col VARCHAR(30)
)
INSERT INTO strip_t VALUES ('Frank')
INSERT INTO strip_t VALUES ('Frank!')
INSERT INTO strip_t VALUES ('Fr^ank')
INSERT INTO strip_t VALUES ('Fran&k')
INSERT INTO strip_t VALUES ('Fran$k')
SET NOCOUNT OFF
SELECT
*
FROM
strip_t
WHERE
col
LIKE '%[^A-Za-z0-9]%'
col
------------------------------
Frank!
Fr^ank
Fran&k
Fran$k
(4 row(s) affected)
Als Gegenprobe:
SELECT
*
FROM
strip_t
WHERE
col
NOT LIKE '%[^A-Za-z0-9]%'
GO
DROP TABLE strip_t
col
------------------------------
Frank
(1 row(s) affected)
Einen Nachteil gibt es doch: Dies funktioniert nicht mit allen Collations. Also, unbedingt gründlich vorher testen!!!
DECLARE @time INT
SET @time = 7382
SELECT
@time / 3600 AS Stunden
, (@time / 60)% 60 AS Minuten
, @time % 60 AS Sekunden
Stunden Minuten Sekunden
----------- ----------- -----------
2 3 2
(1 row(s) affected)
SELECT RIGHT(STUFF(CONVERT(CHAR(22),GETDATE(),13),21,4,' '),9)
---------
10:14:40
(1 row(s) affected)
--Oder
SELECT CONVERT(CHAR(8), GETDATE(), 8)
--------
10:14:40
(1 row(s) affected)
--Oder
SELECT CONVERT(CHAR(8), GETDATE(), 108)
--------
10:14:40
(1 row(s) affected)
Falls man auch noch die Millisekunden braucht, kann man:
SELECT CONVERT(CHAR(12),GETDATE(),114)
------------
10:20:16:033
(1 row(s) affected)
ausführen.
USE Northwind
GO
SELECT
n.dow
, ISNULL(SUM(o.Freight),0)
FROM Orders o
RIGHT JOIN
(SELECT 1
dow
UNION ALL SELECT 2
UNION ALL SELECT 3
UNION ALL SELECT 4
UNION ALL SELECT 5
UNION ALL SELECT 6
UNION ALL SELECT 7) n
ON DATEPART(w,Orderdate) = n.dow
GROUP BY n.dow
dow
----------- ---------------------
1 13772.8400
2 12858.7800
3 11069.5500
4 12114.7200
5 15126.8000
6 .0000
7 .0000
(7 row(s) affected)
Warnung: NULL-Wert wird durch eine Aggregat- oder eine andere SET-Operation gelöscht.
Danke an Jonathan Van Houtte.
DECLARE @yr INT
DECLARE @jd INT
SELECT @yr = 2002, @jd = 245
SELECT DATEADD(yyyy, @yr - 1900, -1) + @jd AS Julian_Date
Julian_Date
------------------------------------------------------
2002-09-02 00:00:00.000
(1 row(s) affected)
Danke an Jonathan Van Houtte.
DECLARE @sekunden INT
SET @sekunden = 61
SELECT
CONVERT(VARCHAR(2), FLOOR(@sekunden/60)) +
':' +
RIGHT('0' + CONVERT(VARCHAR(2), (@sekunden%60)), 2)
-----
1:01
(1 row(s) affected)
IF OBJECT_ID('lfdsum_t') IS NOT NULL
DROP TABLE lfdsum_t
GO
CREATE TABLE lfdsum_t (col1 int)
INSERT INTO lfdsum_t values (1);
INSERT INTO lfdsum_t values (2);
INSERT INTO lfdsum_t values (3);
INSERT INTO lfdsum_t values (4);
INSERT INTO lfdsum_t values (5);
SELECT
a.COL1
,(SELECT
Sum(b.col1)
FROM
lfdsum_t b
WHERE
b.col1 <= a.col1) lfd_Sum
FROM
lfdsum_t a
DROP TABLE lfdsum_t
COL1 lfd_Sum
----------- -----------
1 1
2 3
3 6
4 10
5 15
(5 row(s) affected)
Zugegebenermassen bin ich mir nicht sicher, ob der technische Begriff dafür 'laufende Summe' ist. Für Anregungen zu einem treffenderen Begriff bin ich dankbar.