Alcuni pensieri sulla creazione e l'utilizzo di tabelle per le sfide:
1. L'input SQL può essere acquisito tramite una tabella preesistente
Metodi di input / output di Code Golf :
Gli SQL possono ricevere input da una tabella denominata
La creazione e il popolamento di questa tabella con i valori di input non contano ai fini del totale dei byte, si può semplicemente supporre che sia già presente.
Ciò significa che i tuoi calcoli possono essere emessi tramite il semplice SELECT dalla tabella di input:
SELECT 2*SQRT(a)FROM t
2. Se possibile, non creare affatto una tabella
Invece di (69 byte):
CREATE TABLE t(b INT)
INSERT t VALUES(7),(14),(21),(99)
SELECT b FROM t
Basta fare (43 byte):
SELECT b FROM(VALUES(7),(14),(21),(99))t(b)
3. Se possibile, creare la tabella con un SELECT INTO
Invece di (39 byte):
CREATE TABLE t(p INT)
INSERT t VALUES(2)
Fai questo (17 byte):
SELECT 2 p INTO t
4: considera la possibilità di unire più colonne insieme
Ecco due varianti che restituiscono lo stesso output:
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)
Dopo alcuni test, la versione superiore (più colonne) sembra più corta con 7 o meno righe , la versione inferiore (a causa di SINISTRA e SUBSTRING) è più corta con 8 o più righe . Il chilometraggio può variare, a seconda dei dati esatti.
5: utilizzare REPLACE ed EXEC per sequenze di testo molto lunghe
Sulla scia dell'ottima risposta di drei comodamente , se hai 15 o più valori , usa REPLACE
un simbolo per eliminare i ripetuti '),('
separatori tra gli elementi:
114 caratteri:
SELECT a FROM(VALUES('A'),('B'),('C'),('D'),('E'),('F'),('G'),('H')
,('I'),('J'),('K'),('L'),('M'),('N'),('O'))t(a)
112 caratteri:
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(@)
Se lo sei già utilizzando SQL dinamico per altri motivi (o hai più sostituzioni), la soglia in cui vale la pena è molto più bassa.
6: utilizzare un SELEZIONA con colonne denominate anziché un gruppo di variabili
Ispirato dall'ottima risposta di jmlt qui , riutilizzare le stringhe tramite un SELECT:
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
ritorna
Hare Krishna Hare Krishna
Krishna Krishna Hare Hare
Hare Rama Hare Rama
Rama Rama Hare Hare
(Per MS SQL ho modificato il \t
in un ritorno in linea e modificato CONCAT()
in +
per salvare byte).