Quelques réflexions sur la création et l'utilisation de tableaux pour les défis:
1. L'entrée SQL peut être prise via une table préexistante
Code méthodes d'entrée / sortie de golf :
Les SQL peuvent prendre des entrées d'une table nommée
La création et le remplissage de ce tableau avec des valeurs d'entrée ne comptent pas dans votre total d'octets, vous pouvez simplement supposer qu'il est déjà là.
Cela signifie que vos calculs peuvent sortir via simple SELECT à partir du tableau d'entrée:
SELECT 2*SQRT(a)FROM t
2. Si possible, ne créez pas du tout de table
Au lieu de (69 octets):
CREATE TABLE t(b INT)
INSERT t VALUES(7),(14),(21),(99)
SELECT b FROM t
Faites juste (43 octets):
SELECT b FROM(VALUES(7),(14),(21),(99))t(b)
3. Si possible, créez la table avec SELECT INTO
Au lieu de (39 octets):
CREATE TABLE t(p INT)
INSERT t VALUES(2)
Faites ceci (17 octets):
SELECT 2 p INTO t
4: Envisagez de mélanger plusieurs colonnes ensemble
Voici deux variantes qui renvoient la même sortie:
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)
Après quelques tests, la version supérieure (plusieurs colonnes) semble plus courte avec 7 lignes ou moins , la version inférieure (en raison de LEFT et SUBSTRING) est plus courte avec 8 lignes ou plus . Votre kilométrage peut varier en fonction de vos données exactes.
5: Utilisez REPLACE et EXEC pour de très longues séquences de texte
Dans la veine de l'excellente réponse de comfortablydrei , si vous avez 15 valeurs ou plus , utilisez REPLACE
un symbole pour vous débarrasser des répétitions'),('
séparateurs entre les éléments:
114 caractères:
SELECT a FROM(VALUES('A'),('B'),('C'),('D'),('E'),('F'),('G'),('H')
,('I'),('J'),('K'),('L'),('M'),('N'),('O'))t(a)
112 caractères:
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(@)
Si vous utilisez déjà du SQL dynamique pour d'autres raisons (ou si vous avez plusieurs remplacements), le seuil où cela vaut la peine est beaucoup plus bas.
6: Utilisez un SELECT avec des colonnes nommées au lieu d'un tas de variables
Inspiré par l'excellente réponse de jmlt ici , réutilisez les chaînes via 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
Retour
Hare Krishna Hare Krishna
Krishna Krishna Hare Hare
Hare Rama Hare Rama
Rama Rama Hare Hare
(Pour MS SQL, j'ai changé le \t
en un retour en ligne et changé CONCAT()
en +
pour économiser des octets).