是否可以执行某种内联操作来删除正在检索的值的某个部分?例如,我有
SELECT VersionNumber, [Description],
FROM tblVersions
和VersionNumber
的值可能是
编辑:发现整数可以是1,25,100等值。所以在这种情况下CHARINDEX
和LEFT
将不起作用。
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)
答案 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)可能最好使用句点分隔的超出四个元素的任何内容。