MS SQL Query在下划线之前获取数据

时间:2017-04-12 10:13:03

标签: sql sql-server tsql

我有一个由FullName组成的数据字段

Vinod_Patil
Santosh_Reddy
Sandeep

希望在查询之后执行下划线之前分隔数据

FirstName = SUBSTRING(FullName,0, CHARINDEX('_', FullName) ),

其中FullName是列名

结果是

Vinod
Santosh
-

因此对于Sandeep数据,它显示特殊字符" - "

预期结果

Vinod
Santosh
Sandeep

如果没有任何下划线,如何修改上述查询以显示数据?

祝你好运, 维诺德

4 个答案:

答案 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减去分隔字符。
  • 第二个参数是" 1"而不是" 0",因为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;