Beberapa pemikiran tentang membuat dan menggunakan tabel untuk tantangan:
1. Masukan SQL dapat diambil melalui tabel yang sudah ada sebelumnya
Metode Input / Output Golf Code :
SQL dapat mengambil input dari tabel bernama
Membuat dan mengisi tabel ini dengan nilai input tidak dihitung terhadap total byte Anda, Anda dapat mengasumsikan itu sudah ada.
Ini berarti perhitungan Anda dapat dikeluarkan melalui PILIH sederhana dari tabel input:
SELECT 2*SQRT(a)FROM t
2. Jika memungkinkan, jangan membuat tabel sama sekali
Alih-alih (69 byte):
CREATE TABLE t(b INT)
INSERT t VALUES(7),(14),(21),(99)
SELECT b FROM t
Lakukan (43 byte):
SELECT b FROM(VALUES(7),(14),(21),(99))t(b)
3. Jika memungkinkan, buat tabel dengan SELECT INTO
Alih-alih (39 byte):
CREATE TABLE t(p INT)
INSERT t VALUES(2)
Lakukan ini (17 byte):
SELECT 2 p INTO t
4: Pertimbangkan menumbuk beberapa kolom bersamaan
Berikut adalah dua variasi yang mengembalikan output yang sama:
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)
Setelah beberapa pengujian, versi teratas (beberapa kolom) tampak lebih pendek dengan 7 atau lebih sedikit baris , versi bawah (karena LEFT dan SUBSTRING) lebih pendek dengan 8 baris atau lebih . Jarak tempuh Anda dapat bervariasi, tergantung pada data Anda yang sebenarnya.
5: Gunakan REPLACE dan EXEC untuk urutan teks yang sangat panjang
Di tengah jawaban yang sangat nyaman dengan nyaman , jika Anda memiliki 15 nilai atau lebih , gunakan REPLACE
pada simbol untuk menyingkirkan '),('
pemisah berulang antara elemen:
114 karakter:
SELECT a FROM(VALUES('A'),('B'),('C'),('D'),('E'),('F'),('G'),('H')
,('I'),('J'),('K'),('L'),('M'),('N'),('O'))t(a)
112 karakter:
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(@)
Jika sudah menggunakan SQL dinamis untuk alasan lain (atau memiliki beberapa pengganti), maka ambang di mana ini layak jauh lebih rendah.
6: Gunakan SELECT dengan kolom bernama daripada sekelompok variabel
Terinspirasi oleh jawaban jmlt yang sangat baik di sini , gunakan kembali string melalui 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
kembali
Hare Krishna Hare Krishna
Krishna Krishna Hare Hare
Hare Rama Hare Rama
Rama Rama Hare Hare
(Untuk MS SQL saya mengubah \t
ke pengembalian in-line, dan berubah CONCAT()
untuk +
menyelamatkan bytes).