T-SQL'InString'或删除操作

时间:2013-04-12 19:31:27

标签: sql-server tsql

是否可以执行某种内联操作来删除正在检索的值的某个部分?例如,我有

SELECT VersionNumber, [Description], 
FROM tblVersions

VersionNumber的值可能是 编辑:发现整数可以是1,25,100等值。所以在这种情况下CHARINDEXLEFT将不起作用。

 1.1
 1.55
10.01
10.99
99.1 (a)
50.17 Interim

我需要做的是在句点之后剪切所有内容(值类型为VARCHAR)。这是PIVOT查询的一部分(见下文),因此实际的Select语句是固定字符串的一部分。

SELECT 
   @cols = STUFF(( SELECT DISTINCT TOP 100 PERCENT '],[' + [Description] 
FROM 
   GIIA.vQualScoringGrade 
ORDER BY 
   '],[' + [Description] 
FOR XML PATH('')), 1,2,'') + ']'

SET @query = N'SELECT VersionNumber, ' + @cols + 
              ' FROM (SELECT VersionNumber, Description, Value, OrderBy FROM GIIA.vQualScoringGrade) p
PIVOT (SUM([Value]) for [Description] IN ( ' + @cols + ' )) AS pvt ORDER BY VersionNumber'

execute(@query)

3 个答案:

答案 0 :(得分:2)

也许你想要这样的东西:

LEFT(VersionNumber, CHARINDEX('.',VersionNumber + '.')-1)

无论原始字符串是否包含句点,都可以添加自己的句号,以使其有效。

答案 1 :(得分:0)

我对VersionNumber字段中可以使用的值的初步了解是关闭的。基本上我可以有文字,看起来像小数的数字,或整数。要求是保持这个文件的“开放”文本,使程序员很难,但还有什么是新的?

正如@Pondlife建议的那样,我已经实现了一个SELECT CASE声明,并且大多数情况下它都有效 - 我订购了问题,但我可以稍后处理。

我最终修改了像这样提供sproc的视图:

 SELECT CASE CHARINDEX('.', VersionNumber) WHEN 0 THEN VersionNumber ELSE REPLACE(LEFT(VersionNumber, CHARINDEX('.', VersionNumber)), '.', '') 
 END AS [Award Fee Period], 'Unsatisfactory' AS Description, COUNT(Description) AS GradeCount, 6 AS OrderBy
 FROM GIIA.vQualScoringGrade

非常感谢所有贡献者!

答案 2 :(得分:0)

获取主要版本的最简单方法可能是附加一段时间并使用left / charindex:

select left(VersionNumber, charindex('.', VersionNumber + '.') - 1) as Major
from tblVersions

我还使用了parsename来获取版本号的所有四个部分:

select VersionNumber
    , parsename(VersionNumber + replicate('.0', 3 - (len(VersionNumber) - len(replace(VersionNumber, '.', '')))), 4) as Major
    , parsename(VersionNumber + replicate('.0', 3 - (len(VersionNumber) - len(replace(VersionNumber, '.', '')))), 3) as Minor
    , parsename(VersionNumber + replicate('.0', 3 - (len(VersionNumber) - len(replace(VersionNumber, '.', '')))), 2) as Build
    , parsename(VersionNumber + replicate('.0', 3 - (len(VersionNumber) - len(replace(VersionNumber, '.', '')))), 1) as Revision
from tblVersions

使用任意数量的T-SQL分割器(Tally,CTE,UDF,XML)可能最好使用句点分隔的超出四个元素的任何内容。