Die Anforderung, zufällig ausgewählte Datensätze zurückzugeben, findet man recht häufig. Analyse einer Stichprobe ist eine wahre Spielwiese für Statistiker. In T-SQL kann dies recht einfach umgesetzt werden.
Original von Erland Sommarskog; deutsche Übersetzung von Frank Kalis
Eine sehr weitverbreitete Anforderung an ein Informationssystem ist es, eine oder mehrere Funktionen zu haben, bei denen der Benutzer in der Lage ist, die Daten durch freie Auswahl möglichst vieler verschiedener Kriterien zu durchsuchen. Dies ist eine enorme Herausforderung, da Sie nicht nur den gewünschten Output produzieren müssen, sondern auch die Antwortzeiten innerhalb eines akzeptablen Zeitrahmens halten müssen, zumindest bei häufig verwendeten Suchen. Zu guter Letzt muss der Code leicht zu warten sein, damit neue Wünsche und Anforderungen leicht implementiert werden können.
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!!!
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.
xp_servicecontrol ist eine undokumentierte erweiterte Prozedur, die zur Kontrolle von Diensten auf der SQL Server Maschine eingesetzt werden kann.
SET NOCOUNT ON DECLARE @hex VARCHAR(10) DECLARE @stmt NVARCHAR(255) DECLARE @int INT SET @hex = '0x0000008A' SELECT @stmt = N'SELECT @int = CONVERT( int , ' + @hex + ' )' EXEC sp_ExecuteSql @stmt, N' @int Int Out', @int OUT SELECT @int GO GO GO ----------- 138
Der Unterschied zwischen beiden Datentypen ist mehr als subtil im SQL 92 Standard.
DECLARE @d DATETIME SET @d = '23.07.1968' SELECT DATEDIFF(yyyy,CAST(@d AS DATETIME),GETDATE()) - (CASE WHEN DATEADD(yyyy,DATEDIFF(yyyy,CAST(@d AS DATETIME),GETDATE()),CAST(@d AS DATETIME)) > GETDATE() THEN 1 ELSE 0 END) ----------- 35 (1 row(s) affected)