Một vài suy nghĩ về việc tạo và sử dụng các bảng cho các thách thức:
1. Đầu vào SQL có thể được thực hiện thông qua một bảng có sẵn
Phương thức nhập / xuất mã của Golf Golf :
SQL có thể lấy đầu vào từ một bảng được đặt tên
Tạo và điền vào bảng này với các giá trị đầu vào không được tính vào tổng byte của bạn, bạn có thể giả sử nó đã ở đó.
Điều này có nghĩa là các tính toán của bạn có thể xuất qua CHỌN đơn giản từ bảng đầu vào:
SELECT 2*SQRT(a)FROM t
2. Nếu có thể, đừng thực sự tạo một bảng
Thay vì (69 byte):
CREATE TABLE t(b INT)
INSERT t VALUES(7),(14),(21),(99)
SELECT b FROM t
Chỉ cần làm (43 byte):
SELECT b FROM(VALUES(7),(14),(21),(99))t(b)
3. Nếu có thể, hãy tạo bảng với CHỌN VÀO
Thay vì (39 byte):
CREATE TABLE t(p INT)
INSERT t VALUES(2)
Làm điều này (17 byte):
SELECT 2 p INTO t
4: Xem xét việc trộn nhiều cột với nhau
Đây là hai biến thể trả về cùng một đầu ra:
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)
Sau một số thử nghiệm, phiên bản trên cùng (nhiều cột) có vẻ ngắn hơn với 7 hàng hoặc ít hơn , phiên bản dưới cùng (do TRÁI và BẮT ĐẦU) ngắn hơn với 8 hàng trở lên . Số dặm của bạn có thể thay đổi, tùy thuộc vào dữ liệu chính xác của bạn.
5: Sử dụng REPLACE và EXEC cho các chuỗi văn bản rất dài
Trong câu trả lời xuất sắc của Comfortinglydrei , nếu bạn có 15 giá trị trở lên , hãy sử dụng REPLACE
biểu tượng để loại bỏ các '),('
dấu phân cách lặp lại giữa các phần tử:
114 ký tự:
SELECT a FROM(VALUES('A'),('B'),('C'),('D'),('E'),('F'),('G'),('H')
,('I'),('J'),('K'),('L'),('M'),('N'),('O'))t(a)
112 ký tự:
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(@)
Nếu bạn đã sử dụng SQL động vì các lý do khác (hoặc có nhiều thay thế), thì ngưỡng mà giá trị này thấp hơn nhiều.
6: Sử dụng CHỌN với các cột được đặt tên thay vì một loạt các biến
Lấy cảm hứng từ câu trả lời tuyệt vời của jmlt tại đây , sử dụng lại chuỗi thông qua CHỌN:
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
trả lại
Hare Krishna Hare Krishna
Krishna Krishna Hare Hare
Hare Rama Hare Rama
Rama Rama Hare Hare
(Đối với MS SQL, tôi đã thay đổi thành \t
trả về nội dòng và thay đổi CONCAT()
thành +
để lưu byte).