Tag: "just code"

Zeitwerte addieren

Posted on Jul 13, 2004 von in SQL Server
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)

Nicht-alphanumerische Zeichen finden

Posted on Jul 13, 2004 von in SQL Server
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!!!

Integer in Zeit umwandeln

Posted on Jul 13, 2004 von in SQL Server
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)

Datum aus einer DATETIME Spalte entfernen

Posted on Jul 13, 2004 von in SQL Server
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.

Summe pro Woche anzeigen

Posted on Jul 13, 2004 von in SQL Server
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.

Konvertierung aus Julianischem Kalender

Posted on Jul 13, 2004 von in SQL Server
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.

Sekunden in Minuten umwandeln

Posted on Jul 13, 2004 von in SQL Server
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)

Laufende Summe in T-SQL

Posted on Jul 13, 2004 von in SQL Server
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.