34,591
社区成员
发帖
与我相关
我的任务
分享
create table test
(
a varchar(30)
)
go
insert into test(a)
values('1dsa喔sf'),('23safdsaf'),('74asfdf'),('5ghfh'),('10sdgh')
GO
IF OBJECT_ID('fn_getAllNumFromCharacter','FN') is not null drop function fn_getAllNumFromCharacter
go
create function fn_getAllNumFromCharacter(@Param varchar(1024))
returns varchar(1024)
as
Begin
/*通过循环的方式,每个字符逐个截取*/
--判断是否存在字符
while(patindex('%[^0-9]%',@Param))>=1
begin
--把字符换成''(空)
set @Param=STUFF(@Param,patindex('%[^0-9]%',@Param),1,'')
end
return @Param
End
go
SELECT A FROM test ORDER BY convert(int,dbo.fn_getAllNumFromCharacter(A) )
结果如图:
; WITH cte(col) AS (
SELECT '1abbdd' UNION ALL
SELECT '23fffk' UNION ALL
SELECT '74ppooo' UNION ALL
SELECT '4ffddr'
)
SELECT col FROM cte ORDER BY CAST(LEFT(col,PATINDEX('%[a-z]%',col) - 1) AS INT) ASC
col
-------
1abbdd
4ffddr
23fffk
74ppooo
create table test(a varchar(30))
go
insert into test(a)
values('1.........'),('23.......'),('74.......'),('5.........')
go
select * from test
go
select * from test order by cast(REPLACE(a,'.','') as int)
go
drop table test
go
(4 行受影响)
a
------------------------------
1.........
23.......
74.......
5.........
(4 行受影响)
a
------------------------------
1.........
5.........
23.......
74.......
(4 行受影响)