我有一个由FullName组成的数据字段
Vinod_Patil
Santosh_Reddy
Sandeep
希望在查询之后执行下划线之前分隔数据
FirstName = SUBSTRING(FullName,0, CHARINDEX('_', FullName) ),
其中FullName是列名
结果是
Vinod
Santosh
-
因此对于Sandeep数据,它显示特殊字符" - "
预期结果
Vinod
Santosh
Sandeep
如果没有任何下划线,如何修改上述查询以显示数据?
祝你好运, 维诺德
答案 0 :(得分:1)
select case
when CHARINDEX('_', FullName) > 1 then SUBSTRING(FullName,0, CHARINDEX('_', FullName) )
else FullName
end as FirstName
from MyTable
答案 1 :(得分:1)
我会这样做:
SELECT FirstName = SUBSTRING(FullName, 1, CHARINDEX('_', FullName + '_') - 1),
有三处变化:
CHARINDEX()
的第二个参数附加了_
。这可以确保找到角色,因此不需要条件逻辑。- 1
减去分隔字符。substring()
开始计算" 1"。答案 2 :(得分:0)
查看此查询,如果charindex> 0,你可以使用你的子串函数,否则你可以使用另一个带空格的子串函数来获得第一个名字。
SELECT CASE WHEN CHARINDEX('_', User_FirstName) > 0 THEN 'with special char' ELSE 'Non special char' END AS FirstName FROM Users
答案 3 :(得分:0)
另一种方式:
$ tree -L 2
.
├── DerivedData
│ ├── Build
│ ├── MockIt
│ └── ModuleCache
├── MockIt
├── MockIt-Bridging-Header.h
├── MockIt.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ └── xcuserdata
├── MockItTest
│ ├── Info.plist
│ └── MockItTest.swift
└── main.swift
结果:
-- Sample Data
DECLARE @sampleData TABLE (FullName varchar(100));
INSERT @sampleData VALUES ('Vinod_Patil'),('Santosh_Reddy'),('Sandeep');
-- Solution
SELECT FullName = SUBSTRING(FullName, 1, ISNULL(NULLIF(CHARINDEX('_', FullName),0),100)-1)
FROM @sampleData;