SQL 基于另一列上的特殊字符的计算列
SQL computed column based on a special character on another column
我根本不擅长 SQL,几乎不知道如何执行像删除、删除、添加这样的基本脚本。
我有大约 12 列的数据,我想添加一个计算列,该列将根据特殊字符是否出现在另一列中而改变。
让我们说
A C
Money$ YES
Money NO
就是这个想法,我想创建一个 C 列,如果 A 列上有 $ 符号,它会显示是。这可能吗?我假设您可以使用类似于 if 条件的东西,但我没有使用 SQL 脚本的经验。
您将使用 case
表达式和 like
:
select t.*,
(case when a like '%$%' then 'YES' else 'NO' end) as c
from t;
以下仅为评论。
这是 SQL 的非常基本的语法。我建议您花一些时间学习基础知识。边走边学是一种不错的方法——假设您有一些基础知识可以作为基础。否则,你很可能会花很多时间去学一些东西,而你可能学不到最好的做事方法。
是的,这是可能的。您必须用适当的对象名称替换大括号 ({}
) 中的部分。我还使用 bit
而不是 'Yes'
/'No'
;因为这似乎更适合:
ALTER TABLE {YourTable} ADD {New Column Name} AS CONVERT(bit, CASE WHEN {Column} LIKE '%$%' THEN 1 ELSE 0 END) PERSISTED;
请注意,如果列 ({Column}
) 的值为 NULL
,而不是 NULL
,这将 return 0
;不确定这是否是正确的逻辑,但这应该足以让球滚动。如果不是,请阅读 CASE
表达式和 NULL
逻辑。
您可以使用正则表达式检查 EX 列中的任何特殊字符:
SQL服务器
SELECT CASE WHEN 'ABCD$' Like '%[^a-zA-Z0-9]%' 1 THEN 'YES' ELSE 'NO' END as result
MYSQL
SELECT CASE WHEN 'ABCD$' REGEXP '[^a-zA-Z0-9]' = 1 THEN 'YES' ELSE 'NO' END as result
可以根据要求更改正则表达式
REGEXP '[^[:alnum:]]'
正则表达式匹配可以帮助您找出字符串中是否有您认为是特殊字符的字符:
SELECT
ColumnA
, SUBSTRING(ColumnA, PATINDEX('%[^ a-zA-Z0-9]%', ColumnA), 1) AS FirstSpecialChar
WHERE
ColumnA LIKE '%[^ a-zA-Z0-9]%'
;
模式 [^ a-zA-Z0-9]
将匹配任何不是数字、space 或字母字符的字符(注意字符组开头的 ^ - 这意味着 NOT
)
我根本不擅长 SQL,几乎不知道如何执行像删除、删除、添加这样的基本脚本。
我有大约 12 列的数据,我想添加一个计算列,该列将根据特殊字符是否出现在另一列中而改变。
让我们说
A C
Money$ YES
Money NO
就是这个想法,我想创建一个 C 列,如果 A 列上有 $ 符号,它会显示是。这可能吗?我假设您可以使用类似于 if 条件的东西,但我没有使用 SQL 脚本的经验。
您将使用 case
表达式和 like
:
select t.*,
(case when a like '%$%' then 'YES' else 'NO' end) as c
from t;
以下仅为评论。
这是 SQL 的非常基本的语法。我建议您花一些时间学习基础知识。边走边学是一种不错的方法——假设您有一些基础知识可以作为基础。否则,你很可能会花很多时间去学一些东西,而你可能学不到最好的做事方法。
是的,这是可能的。您必须用适当的对象名称替换大括号 ({}
) 中的部分。我还使用 bit
而不是 'Yes'
/'No'
;因为这似乎更适合:
ALTER TABLE {YourTable} ADD {New Column Name} AS CONVERT(bit, CASE WHEN {Column} LIKE '%$%' THEN 1 ELSE 0 END) PERSISTED;
请注意,如果列 ({Column}
) 的值为 NULL
,而不是 NULL
,这将 return 0
;不确定这是否是正确的逻辑,但这应该足以让球滚动。如果不是,请阅读 CASE
表达式和 NULL
逻辑。
您可以使用正则表达式检查 EX 列中的任何特殊字符: SQL服务器
SELECT CASE WHEN 'ABCD$' Like '%[^a-zA-Z0-9]%' 1 THEN 'YES' ELSE 'NO' END as result
MYSQL
SELECT CASE WHEN 'ABCD$' REGEXP '[^a-zA-Z0-9]' = 1 THEN 'YES' ELSE 'NO' END as result
可以根据要求更改正则表达式
REGEXP '[^[:alnum:]]'
正则表达式匹配可以帮助您找出字符串中是否有您认为是特殊字符的字符:
SELECT
ColumnA
, SUBSTRING(ColumnA, PATINDEX('%[^ a-zA-Z0-9]%', ColumnA), 1) AS FirstSpecialChar
WHERE
ColumnA LIKE '%[^ a-zA-Z0-9]%'
;
模式 [^ a-zA-Z0-9]
将匹配任何不是数字、space 或字母字符的字符(注意字符组开头的 ^ - 这意味着 NOT
)