sql-server - 使用特殊字符拆分 varchar 列

标签 sql-server

我有一列,其值为

1_987123
12_987654

在这里,我只需分隔列值中的第一个字母 '1''12'。我尝试过 substringcharindex 来查找该值。我使用的语法是: substring(Columnname,1,charindex('_',Columnname,1)-1)

这可以查找具有值的列。但就我而言,该列中有空白值。在这种情况下,上述语法会出错。尝试了像 coalesce 这样的场景,但它不接受,因为列数据类型是 varchar

您能给我建议其他选择吗?

最佳答案

您需要使用 CASE 表达式来处理不带 '_' 的值:

WITH Tbl(col) AS(
    SELECT '1_987123' UNION ALL
    SELECT '12_987654' UNION ALL
    SELECT '12'
)
SELECT
    CASE
        WHEN CHARINDEX('_', col) > 0 THEN LEFT(col, CHARINDEX('_', col)-1)
        ELSE col
    END
FROM Tbl

关于sql-server - 使用特殊字符拆分 varchar 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37585599/

相关文章:

sql - 根据特定记录查找所有 parent

c# 在事务中检索插入的 ID

sql - 类似运算符的基础知识

sql-server - 数据库设计 : An art or headache (Managing relationships)

用于选择唯一的 SQL 语句

c# - 如何仅在满足特定条件时自动增加复合键 ID?

sql-server - 在基于分级的税收系统中计算税收的情况

SQL 按列计数函数

c# - 从 2 个查询中选择更好的查询,都返回相同的结果

sql-server - 获取重复项真的是一个糟糕的查询还是糟糕的数据库设计?