Archiv für: "Juli 2004"

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)

Sequentielle Nummerierung durch UPDATE

Posted on Jul 13, 2004 von in SQL Server

Vor einiger Zeit habe ich auf SQLTeam.com etwas sehr Nützliches entdeckt. Die Generierung einer sequentiellen Nummerierung mit Hilfe eines einzelnen UPDATE Statements.

SET NOCOUNT ON
CREATE TABLE SEQ_T
(
col1 INT DEFAULT 0
)
DECLARE @SEQUENCE INT
SET @SEQUENCE = 0
WHILE @SEQUENCE <=10
BEGIN
INSERT INTO SEQ_T DEFAULT VALUES
SET @SEQUENCE = @SEQUENCE+1
END
SET NOCOUNT OFF
SELECT * FROM SEQ_T
SET @SEQUENCE = 0
UPDATE SEQ_T SET @SEQUENCE = col1 = @SEQUENCE + 1
SELECT * FROM SEQ_T
DROP TABLE SEQ_T

col1
-----------
0
0
0
0
0
0
0
0
0
0
0

(11 row(s) affected)


(11 row(s) affected)

col1
-----------
1
2
3
4
5
6
7
8
9
10
11

(11 row(s) affected)

...einziger Nachteil ist, dass man nicht explizit in der Lage ist, die Sortierung vorzugeben.

Die 10 grössten Tabellen anzeigen lassen

Posted on Jul 13, 2004 von in SQL Server

Um schnell mall einen Überblick über die umfangreichsten Tabellen in einer Datenbank zu erhalten, kann man folgendes Skript einsetzen. IMHO, ist die direkte Abfrage der Systemtabellen in so einem Fall zulässig. 

Ganze Geschichte »

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.

Trace in eine Tabelle exportieren

Posted on Jul 13, 2004 von in SQL Server
SELECT 
*
INTO
Trace_Table_Name
FROM :: fn_trace_gettable('c:\MyTrace.trc', DEFAULT)

BOL beschreibt ausführlicher die fn_trace_gettable Funktion.