Ein paar Gedanken zum Erstellen und Verwenden von Tabellen für Herausforderungen:
1. Die SQL-Eingabe kann über eine bereits vorhandene Tabelle erfolgen
Code Golf Eingabe / Ausgabemethoden :
SQLs können Eingaben von einer benannten Tabelle erhalten
Das Erstellen und Auffüllen dieser Tabelle mit Eingabewerten zählt nicht für Ihre Bytesumme. Sie können lediglich davon ausgehen, dass sie bereits vorhanden ist.
Dies bedeutet, dass Ihre Berechnungen über einfaches SELECT aus der Eingabetabelle ausgegeben werden können:
SELECT 2*SQRT(a)FROM t
2. Erstellen Sie nach Möglichkeit überhaupt keine Tabelle
Anstelle von (69 Bytes):
CREATE TABLE t(b INT)
INSERT t VALUES(7),(14),(21),(99)
SELECT b FROM t
Mach einfach (43 Bytes):
SELECT b FROM(VALUES(7),(14),(21),(99))t(b)
3. Erstellen Sie nach Möglichkeit die Tabelle mit einem SELECT INTO
Anstelle von (39 Bytes):
CREATE TABLE t(p INT)
INSERT t VALUES(2)
Tun Sie dies (17 Bytes):
SELECT 2 p INTO t
4: Überlegen Sie, ob Sie mehrere Spalten zusammenfügen möchten
Hier sind zwei Varianten, die dieselbe Ausgabe zurückgeben:
SELECT a,b FROM
(VALUES('W','Bob'),('X','Sam'),('Y','Darla'),('Z','Elizabeth'))t(a,b)
SELECT LEFT(a,1),SUBSTRING(a,2,99)FROM
(VALUES('WBob'),('XSam'),('YDarla'),('ZElizabeth'))t(a)
Nach einigen Tests ist die obere Version (mehrere Spalten) mit 7 oder weniger Zeilen kürzer , die untere Version (aufgrund von LEFT und SUBSTRING) mit 8 oder mehr Zeilen kürzer . Ihr Kilometerstand kann je nach Ihren genauen Daten variieren.
5: Verwenden Sie REPLACE und EXEC für sehr lange Textsequenzen
In der Ader der ausgezeichneten Antwort des comfortablydrei , wenn Sie 15 oder mehr Werte , die Verwendung REPLACE
auf einem Symbol loszuwerden, die wiederholt zu bekommen '),('
Separatoren zwischen den Elementen:
114 Zeichen:
SELECT a FROM(VALUES('A'),('B'),('C'),('D'),('E'),('F'),('G'),('H')
,('I'),('J'),('K'),('L'),('M'),('N'),('O'))t(a)
112 Zeichen:
DECLARE @ CHAR(999)=REPLACE('SELECT a FROM(VALUES(''
A-B-C-D-E-F-G-H-I-J-K-L-M-N-O''))t(a)','-','''),(''')EXEC(@)
Wenn Sie aus anderen Gründen bereits dynamisches SQL verwenden (oder mehrere Ersetzungen haben), ist der Schwellenwert, bei dem dies sinnvoll ist, viel niedriger.
6: Verwenden Sie ein SELECT mit benannten Spalten anstelle einer Reihe von Variablen
Inspiriert von der hervorragenden Antwort von jmlt hier , verwenden Sie Strings über ein SELECT erneut:
SELECT a+b+a+b+d+b+b+a+a+d+a+c+a+c+d+c+c+a+a
FROM(SELECT'Hare 'a,'Krishna 'b,'Rama 'c,'
'd)t
kehrt zurück
Hare Krishna Hare Krishna
Krishna Krishna Hare Hare
Hare Rama Hare Rama
Rama Rama Hare Hare
(Für MS SQL habe ich das \t
in ein Inline-Return geändert CONCAT()
und +
in um Bytes zu sparen).