5

是一篇非常有趣的 wiki 文章,介绍了在不访问物理源文件(在文件系统中)的情况下打印自己的源代码的程序。文章中的示例包括 C 和 Scheme quine 程序(是的,它们似乎是这样称呼的)。我记得很久以前(大约 5 年)有人问我是否可以编写一个“返回自身”的 SQL 查询。那时我几乎没有考虑过(老实说,我根本没有考虑过)。但是读完这篇文章后,我想起了那件事。现在我想说,提出这个问题的人并不是 100% 可信的,因为他很可能不知道自己在说什么。但也许有可能?那么,有没有人知道是否存在 quine SQL 查询,无论“返回自身” 可能意味着在这种情况下。谢谢。

4

5 回答 5

7

SQL Server 版本,来自这里

SELECT Replace(Replace(
'SELECT REPLACE(REPLACE("$",CHAR(34),CHAR(39)),CHAR(36),"$") AS Quine',
Char(34), Char(39)), Char(36),
'SELECT REPLACE(REPLACE("$",CHAR(34),CHAR(39)),CHAR(36),"$") AS Quine')
AS Quine 
于 2010-10-23T21:40:36.910 回答
2

甲骨文版本:

SELECT REPLACE(REPLACE('SELECT REPLACE(REPLACE("$",CHR(34),CHR(39)),CHR(36),"$") AS Quine FROM dual',CHR(34),CHR(39)),CHR(36),'SELECT REPLACE(REPLACE("$",CHR(34),CHR(39)),CHR(36),"$") AS Quine FROM dual') AS Quine FROM dual
于 2013-11-04T12:07:06.103 回答
1

Oracle SQL Revealed一书中的几个解决方案。

123 字节

select
replace('@''[@'||chr(93)||''')from dual;','@',q'[select
replace('@''[@'||chr(93)||''')from dual;','@',q]')from dual;

100 字节

select
substr(rpad(1,125,'||chr(39)),26)from dual;select
substr(rpad(1,125,'||chr(39)),26)from dual;
于 2018-11-25T23:36:54.713 回答
0

很抱歉挖了这个。我对 MS SQL Server 的最短版本是 131 个字符长的 quine:

DECLARE @ CHAR(65)='DECLARE @ CHAR(65)=#PRINT REPLACE(@,CHAR(35),CHAR(39)+@+CHAR(39))'PRINT REPLACE(@,CHAR(35),CHAR(39)+@+CHAR(39))
于 2018-06-19T07:16:03.480 回答
0

使用雪花和CURRENT_STATEMENT()

SELECT CURRENT_STATEMENT();

输出:

选择当前状态();

于 2021-05-19T19:56:30.287 回答