缩短 SQL 个条件
Shorten SQL conditions
我有一个 SQL 有一些条件,例如:
SELECT
CASE WHEN RIGHT(CAST(COLUMN_A as nvarchar(max)),1) = '.' THEN
SUBSTRING (COLUMN_A, DATALENGTH(COLUMN_A) - 4, 4) ELSE
SUBSTRING (COLUMN_A, DATALENGTH(COLUMN_A) - 3, 4) END AS COL_1
在同一个 select 中,我让其他人使用上述规则进行检查,我必须全部重复一遍。我正在寻找一种不重复其余代码的方法,有些东西
喜欢:
CASE
WHEN COL_1 LIKE 'AAAA' OR
COL_1 LIKE 'BBBB' OR
COL_1 LIKE 'CCCC' OR
COL_1 LIKE 'DDDD' THEN 1 ELSE 0 END AS Code
使用上述 COL_1 的结果进行其他检查。我怎样才能做到这一点?谢谢
您可以像这样使用嵌套的 SELECT 命令:
SELECT CASE
WHEN x.COL_1 LIKE 'AAAA' OR
x.COL_1 LIKE 'BBBB' OR
x.COL_1 LIKE 'CCCC' OR
x.COL_1 LIKE 'DDDD' THEN 1 ELSE 0 END AS Code
FROM (
SELECT
CASE WHEN RIGHT(CAST(COLUMN_A as nvarchar(max)),1) = '.' THEN
SUBSTRING (COLUMN_A, DATALENGTH(COLUMN_A) - 4, 4) ELSE
SUBSTRING (COLUMN_A, DATALENGTH(COLUMN_A) - 3, 4) END AS COL_1
) x
SELECT *
FROM (
SELECT list_of_columns
, CASE WHEN this=cool THEN 1 ELSE 0 END As computed_column
FROM ...
) As a_subquery
WHERE computed_column = 1
CASE 语法应该是这样的:
CASE
WHEN COL_1 LIKE 'AAAA' THEN 1
WHEN COL_1 LIKE 'BBBB' THEN 1
WHEN COL_1 LIKE 'CCCC' THEN 1
WHEN COL_1 LIKE 'DDDD' THEN 1
ELSE 0
END AS Code
翻转,即在子字符串中执行大小写:
SELECT
SUBSTRING (COLUMN_A, DATALENGTH(COLUMN_A) -
CASE WHEN RIGHT(CAST(COLUMN_A as nvarchar(max)),1) = '.' THEN then 4 else 3 end, 4) AS COL_1
并使用 IN 表示不同的值,如果需要验证长度(LIKE 和尾随空格...)
CASE
WHEN COL_1 IN ('AAAA','BBBB','CCCC','DDDD') and LENGTH(col_1) = 4 THEN 1
ELSE 0 END AS Code
我有一个 SQL 有一些条件,例如:
SELECT
CASE WHEN RIGHT(CAST(COLUMN_A as nvarchar(max)),1) = '.' THEN
SUBSTRING (COLUMN_A, DATALENGTH(COLUMN_A) - 4, 4) ELSE
SUBSTRING (COLUMN_A, DATALENGTH(COLUMN_A) - 3, 4) END AS COL_1
在同一个 select 中,我让其他人使用上述规则进行检查,我必须全部重复一遍。我正在寻找一种不重复其余代码的方法,有些东西 喜欢:
CASE
WHEN COL_1 LIKE 'AAAA' OR
COL_1 LIKE 'BBBB' OR
COL_1 LIKE 'CCCC' OR
COL_1 LIKE 'DDDD' THEN 1 ELSE 0 END AS Code
使用上述 COL_1 的结果进行其他检查。我怎样才能做到这一点?谢谢
您可以像这样使用嵌套的 SELECT 命令:
SELECT CASE
WHEN x.COL_1 LIKE 'AAAA' OR
x.COL_1 LIKE 'BBBB' OR
x.COL_1 LIKE 'CCCC' OR
x.COL_1 LIKE 'DDDD' THEN 1 ELSE 0 END AS Code
FROM (
SELECT
CASE WHEN RIGHT(CAST(COLUMN_A as nvarchar(max)),1) = '.' THEN
SUBSTRING (COLUMN_A, DATALENGTH(COLUMN_A) - 4, 4) ELSE
SUBSTRING (COLUMN_A, DATALENGTH(COLUMN_A) - 3, 4) END AS COL_1
) x
SELECT *
FROM (
SELECT list_of_columns
, CASE WHEN this=cool THEN 1 ELSE 0 END As computed_column
FROM ...
) As a_subquery
WHERE computed_column = 1
CASE 语法应该是这样的:
CASE
WHEN COL_1 LIKE 'AAAA' THEN 1
WHEN COL_1 LIKE 'BBBB' THEN 1
WHEN COL_1 LIKE 'CCCC' THEN 1
WHEN COL_1 LIKE 'DDDD' THEN 1
ELSE 0
END AS Code
翻转,即在子字符串中执行大小写:
SELECT
SUBSTRING (COLUMN_A, DATALENGTH(COLUMN_A) -
CASE WHEN RIGHT(CAST(COLUMN_A as nvarchar(max)),1) = '.' THEN then 4 else 3 end, 4) AS COL_1
并使用 IN 表示不同的值,如果需要验证长度(LIKE 和尾随空格...)
CASE
WHEN COL_1 IN ('AAAA','BBBB','CCCC','DDDD') and LENGTH(col_1) = 4 THEN 1
ELSE 0 END AS Code