我希望获得b / w [word]__.png
中的数字
word1.png , word2.png word3......word10.png
但是按照1,2,3这样的顺序进行,我尝试这个查询,但它不会从1开始按顺序返回数据:
select * from psl_table where values like 'word_%.png'
答案 0 :(得分:1)
提取数字部分,强制转换为INT,并对其进行排序:
select * from psl_table
where values like 'word_%.png'
order by cast(substring(values, 6, length(values) - 10) as int)
答案 1 :(得分:1)
您可以尝试在SQL Server中使用替换功能。首先搜索你的字符串然后替换" word" &安培; " png格式"从你的价值观然后将其转换为" INT"订购它。我已对其进行了测试,请查看下面的SQL:
Create Table psl_table
(
[values] NVarChar(MAX)
)
Insert Into psl_table Values('word1.png')
Insert Into psl_table Values('word2.png')
Insert Into psl_table Values('word3.png')
Insert Into psl_table Values('word4.png')
Insert Into psl_table Values('word001.png')
Insert Into psl_table Values('word12.png')
Insert Into psl_table Values('word6.png')
Insert Into psl_table Values('word8.png')
Insert Into psl_table Values('word10.png')
Insert Into psl_table Values('word9.png')
select * from psl_table where [values] like 'word%.png' order by Convert(Int,Replace(Replace([values],'.png',''),'word',''))
答案 2 :(得分:0)
必须工作!
SELECT Convert(INT,(SUBSTRING(values, PATINDEX('%[0-9]%', values), PATINDEX('%[0-9][^0-9]%', values + 'g') - PATINDEX('%[0-9]%',values) + 1))) AS Number FROM psl_table Order by Number
答案 3 :(得分:-2)
对于早先的回答,我很抱歉,这不符合情况
DECLARE @TABLE AS TABLE(ITEM nvarchar(200))
INSERT INTO @TABLE VALUES('myimage11.png')
INSERT INTO @TABLE VALUES('myimage2.png')
INSERT INTO @TABLE VALUES('myimage6.png')
INSERT INTO @TABLE VALUES('myimage3.png')
INSERT INTO @TABLE VALUES('myimage1.png')
为了排序而转换为整数(使用公用表表达式 - CTE)
;WITH CTE AS (
select CONVERT(INT, SUBSTRING(ITEM, 8, CHARINDEX('.', ITEM, 0) - 8)) INTVAL FROM @TABLE
)
SELECT * FROM CTE ORDER BY INTVAL
以下是结果,请记住上述插入查询中的实际顺序