Sql 信息\u SCHEMA.COLUMNS从结果中删除列名
我有以下疑问:Sql 信息\u SCHEMA.COLUMNS从结果中删除列名,sql,sql-server,tsql,sql-server-2012,Sql,Sql Server,Tsql,Sql Server 2012,我有以下疑问: USE db183 SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME LIKE 'SCHEDULE_%' OR COLUMN_NAME LIKE 'EMPINFO_%' OR COLUMN_NAME LIKE 'AVAIL_%' OR COLUMN_NAME LIKE 'TRAINING_%' ORDER BY CASE WHEN COLU
USE db183
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE 'SCHEDULE_%'
OR COLUMN_NAME LIKE 'EMPINFO_%'
OR COLUMN_NAME LIKE 'AVAIL_%'
OR COLUMN_NAME LIKE 'TRAINING_%'
ORDER BY
CASE
WHEN COLUMN_NAME LIKE 'SCHEDULE_%' THEN 0
WHEN COLUMN_NAME LIKE 'EMPINFO_%' THEN 1
WHEN COLUMN_NAME LIKE 'AVAIL_%' THEN 2
WHEN COLUMN_NAME LIKE 'TRAINING_%' THEN 3
END, ORDINAL_POSITION ASC
我不想包括列名EMPINFO_empName
但是,在尝试此操作时:
USE db183
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE 'SCHEDULE_%'
OR COLUMN_NAME LIKE 'EMPINFO_%'
OR COLUMN_NAME LIKE 'AVAIL_%'
OR COLUMN_NAME LIKE 'TRAINING_%'
AND NOT COLUMN_NAME LIKE '%_empName' /*<-- NEW ADDED CODE HERE */
ORDER BY
CASE
WHEN COLUMN_NAME LIKE 'SCHEDULE_%' THEN 0
WHEN COLUMN_NAME LIKE 'EMPINFO_%' THEN 1
WHEN COLUMN_NAME LIKE 'AVAIL_%' THEN 2
WHEN COLUMN_NAME LIKE 'TRAINING_%' THEN 3
END, ORDINAL_POSITION ASC
似乎没有去掉那个特定的列名——它仍然像第一个查询一样列在输出中
我猜我有一些语法不正确,但我没有发现任何错误。您需要在LIKE语句中转义下划线:
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE 'SCHEDULE[_]%' OR
COLUMN_NAME LIKE 'AVAIL[_]%' OR
COLUMN_NAME LIKE 'TRAINING[_]%' OR
(COLUMN_NAME LIKE 'EMPINFO[_]%' AND COLUMN_NAME NOT LIKE '%[_]empName%')
实际上,如果您真的只想排除单个列,则只需使用全名:
WHERE COLUMN_NAME <> 'EMPINFO_empName'
您需要在LIKE语句中转义下划线:
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE 'SCHEDULE[_]%' OR
COLUMN_NAME LIKE 'AVAIL[_]%' OR
COLUMN_NAME LIKE 'TRAINING[_]%' OR
(COLUMN_NAME LIKE 'EMPINFO[_]%' AND COLUMN_NAME NOT LIKE '%[_]empName%')
实际上,如果您真的只想排除单个列,则只需使用全名:
WHERE COLUMN_NAME <> 'EMPINFO_empName'
这不仅仅是关于模式的信息
这不仅仅是关于模式的信息
仍然显示在查询结果doing和COLUMN\u NAME中,与“%[\u]empName%”不同,奇怪的是,doing COLUMN\u NAME“EMPINFO\u empName”也不会删除它!再试一次。您需要在列名中的所有下划线周围使用括号。@Alex Kudryashev说得对,但也谢谢您@严格地说,TimBiegeleisen应该转义为[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\!再试一次。您需要在列名中的所有下划线周围使用括号。@Alex Kudryashev说得对,但也谢谢您@严格地说,TimBiegeleisen应该转义为[\uu],但您的布尔分组是错误的。就是这样!谢谢亚历克斯!真正的问题是和或之间的优先顺序。在条件周围使用parens允许我们覆盖默认的优先顺序。我们还应该指出,下划线字符在类似条件下是通配符。该下划线将匹配任何一个字符。这与2+3*4与2+3*4相同。您确定此查询符合您的想法吗?这些下划线不会被解释为通配符吗?@TimBiegeleisen在这种情况下,只要不包含列EMPINFO2empName,就无所谓了。正确的代码应该类似于完成此操作的“%[[u]empName”!谢谢亚历克斯!真正的问题是和或之间的优先顺序。在条件周围使用parens允许我们覆盖默认的优先顺序。我们还应该指出,下划线字符在类似条件下是通配符。该下划线将匹配任何一个字符。这与2+3*4与2+3*4相同。您确定此查询符合您的想法吗?这些下划线不会被解释为通配符吗?@TimBiegeleisen在这种情况下,只要不包含列EMPINFO2empName,就无所谓了。正确的代码应类似于“%[[uu]empName”