我想在b / w [word]__.png
中获得数字
word1.png , word2.png word3......word10.png
但得到像1,2,3这样的序列.....我正在尝试这个查询,但它不会从1开始依次返回数据:
select * from psl_table where values like 'word_%.png'
您可以尝试在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',''))
提取数字部分,转换为INT,并对其进行排序:
select * from psl_table
where values like 'word_%.png'
order by cast(substring(values, 6, length(values) - 10) as int)
这必须工作!
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
对于早先的回答感到抱歉,这不符合情况
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
这是结果,请记住上面插入查询中的实际顺序