我在sql中很困惑,比如查询

时间:2017-03-06 09:13:25

标签: sql sql-server

我希望获得b / w [word]__.png中的数字

word1.png , word2.png word3......word10.png

但是按照1,2,3这样的顺序进行,我尝试这个查询,但它不会从1开始按顺序返回数据:

select * from psl_table where  values like 'word_%.png'

4 个答案:

答案 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 

以下是结果,请记住上述插入查询中的实际顺序

enter image description here