當前位置:首頁 » 編程語言 » sql數字排序函數

sql數字排序函數

發布時間: 2022-12-17 00:07:06

sql語句中對一個欄位排序,欄位中含有字元串和數字,(怎根據數字進行排序)

order by 欄位名稱+0 desc/asc的形式進行排序
order by 欄位名稱*1 desc/asc的形式進行排序

Ⅱ SQL寫一個給數字排序的函數,比如輸入12,56,32要輸出12,32,56. 入參不確定 可以是任意多個數

use master
go
if object_id('OrderStr')<>0 drop function OrderStr
go
create function OrderStr(@oristr varchar(256), @delimiter char,@Num int)
returns varchar(256)
as
BEGIN
DECLARE @re varchar(256) --返回值
DECLARE @ch varchar(250) --一次掃描所存放最小的字元
declare @str varchar(255)
DECLARE @j int,@k int --游標
declare @m int
set @j=0
set @re=''
--對於不含,的字元串不排序直接返回
if charindex(@delimiter,@oristr,1)=0
begin
set @re=@oristr
return @re
end
while len(@oristr)>0 --外層循環
BEGIN
set @m=charindex(@delimiter,@oristr,1)
if(@m=0 and @re is not null)
begin
set @re=isnull(@re ,'')+@delimiter+ @oristr --把ch追加給re
return @re
end
SET @ch=SUBSTRING(@oristr,1,@m-1)
set @j=1
while(@j<=len(@oristr) and charindex(@delimiter,@oristr,@j)>0) --內層循環
BEGIN
set @m=charindex(@delimiter,@oristr,@j)
if @m>0
begin
set @str=SUBSTRING(@oristr,@m+1,(case when charindex(@delimiter,@oristr,@m+1)>0 then charindex(@delimiter,@oristr,@m+1)-@m-1 else len(@oristr) end))
set @j=@m+1
end
else
begin
set @str=substring(@oristr,@j,len(@oristr))
set @j=len(@oristr)
end
if @Num = 0
if convert(int ,@str)< convert(int ,@ch)--如果OriStr[j]值比ch小,則把OriStr[j]賦值給ch

SET @ch=@str

else
SET @str=@ch
else
if @str<@ch
SET @ch=@str
else
SET @str=@ch

set @k=charindex(@ch,@oristr)
END
if @re=''
begin
set @re=@ch --把ch追加給re
end
else
begin
set @re=isnull(@re ,'')+@delimiter+ @ch --把ch追加給re
end
if (@k>0 )
begin
set @oristr=stuff(@oristr,charindex(@ch,@oristr),(case when charindex(@delimiter,@oristr,@k)>0 then charindex(@delimiter,@oristr,@k)+1-@k else len(@oristr)+1-@k end),'')
end
else
begin
set @re=isnull(@re,'') + left(@oristr,len(@oristr)-1)
set @oristr=''
end
if right(rtrim(@oristr),1)=@delimiter
begin
set @oristr=stuff(@oristr,len(@oristr),1,'')
end
END
return @re
end
go
select dbo.OrderStr('g,b,e,d,a,s',',',1)

select dbo.OrderStr('11,32,123,244,34',',',0)
既解決了數字的又解決了字元串的排序

Ⅲ sql 數字+字元+數字排序問題

SELECT*FROMt3ORDERBY
CAST(LEFT(name,patindex('%[a-z,A-Z]%',right(name,len(name)-patindex('%[0-9]%',name))))ASINT),
SUBSTRING(NAME,patindex('%[a-z,A-Z]%',right(name,len(name)-patindex('%[0-9]%',name)+1)),1),
CAST(RIGHT(name,len(name)-patindex('%[a-z,A-Z]%',right(name,len(name)-patindex('%[0-9]%',name)+1)))ASINT)

就是麻煩點,其中的name列就是你的

1A2
3A2
3A10.....進行排序的列,改一下就好了,不管你第一個數字
或第二個數字有多少位都可以排序,只要你的字母在數字中只有一位就只有可以。

Ⅳ SQL字元型欄位按數字型欄位排序實現方法

這是很久之前的就遇到的問題了,去年寫了個WP插件:WordPress投票插件Ludou
Simple
Vote,由於有些使用者需要一個投票排行榜,所以需要用一條SQL來讀取按得分排序的文章列表。

Ludou
Simple
Vote的投票得分結果是以自定義欄目的方式存儲在WordPress的postmeta中,分值存放在meta_value欄位,而meta_value欄位類型是longtext,如果直接使用下面的SQL查詢語句來排序:
復制代碼
代碼如下:
ORDER
BY
`meta_value`

那麼按得分排序得到的結果可能是:
1
10
11
123
1234
2
25
253
3

由於是按字母順序排列,所以123排在了2的前面,顯然不符合我們的要求,那麼怎樣才能按照我們預想的數字順序排序呢?下面介紹兩種方法。
一、採用MySQL的cast函數,轉換欄位格式

這里我們將meta_value欄位轉換成數值類型的欄位DECIMAL,然後再進行排序:
復制代碼
代碼如下:
ORDER
BY
CAST(`meta_value`
AS
DECIMAL)

需要注意的是,你所要排序的meta_value欄位的值必須都是可轉換成數字,否則將會出錯。
二、使用MySQL絕對值函數ABS

使用MySQL絕對值函數ABS,它告訴MySQL使用絕對值來處理處理這個欄位:
復制代碼
代碼如下:ORDER
BY
ABS(`meta_value`)

Ⅳ sql 根據數量進行排序

Select Top 10 A.p_id, B.p_name, SUM(A.p_number) as SumNumber, SUM(A.p_price) as SumPrice from OrderDetails A left join Proct B ON A.p_id = B.p_id Group By A.p_id, B.p_name Order by SUM(A.p_number) DESC說明:查詢結果中p_id是商品ID, p_name是商品名稱,SumNumber是總數量,SumPrice是總售價記錄根據總數量(SumNumber)來排序取前十條記錄。另外,在聯合查詢中使用left join 查詢時最有效率的查詢方法

Ⅵ sql 升序降序排列

降序:SELECT * FROM kc ORDERBYcpbh DESC

升序:SELECT * FROM kc ORDERBYcpbhASC

語法:

sql可以根據欄位進行排序,其中,DESC表示降序,ASC表示升序

order by 欄位名 DESC;按照欄位名降序排序

order by 欄位名 ASC;按照欄位名升序排序

實例:

一、/*查詢學生表中姓名、學號,並以學號降序排序*/

select name,StuID from Students_information order by StuID desc /**order by 以什麼排序,默認為升序,desc是降序*/

二、/*查詢學生表中前5名學生的姓名,學號,並以學號升序排列*/

select top 5 name,StuID from Students_information order by StuID /*order by 默認為升序*/

(6)sql數字排序函數擴展閱讀

一、ORDER BY 語句

ORDER BY 語句用於根據指定的列對結果集進行排序。

ORDER BY 語句默認按照升序對記錄進行排序。

如果您希望按照降序對記錄進行排序,可以使用 DESC 關鍵字。

二、SQL 排序多個欄位

order by 多個欄位,每個欄位後面都有排序方式,默認ASC

例如:select table a order by a.time1 ,a.time2 desc,a.time3 asc

Ⅶ sql怎麼根據欄位長度和大小排序

可以參考下面的代碼:

select * from 表 order by len(欄位);長度,由短到長

select * from 表 order by len(欄位)desc;長度,由長到短

select * from 表 order by 欄位;大小,由小到大

select * from 表 order by 欄位 desc;大小,由大到小

(7)sql數字排序函數擴展閱讀:

sql參考語句

更新:update table1 set field1=value1 where 范圍

排序:select * from table1 order by field1,field2 [desc]

求和:select sum(field1) as sumvalue from table1

平均:select avg(field1) as avgvalue from table1

Ⅷ sql數字字元串排序

--負責把字元串轉換為Varbinary
--思路,把字元串按.拆分,然後轉換成int,再轉換成varbinary拼接
CreateFunctionf_Order(@SourceSqlVarchar(8000),@StrSeprateVarchar(2))
ReturnsVarbinary(8000)
As
Begin
Declare@tempVarbinary(8000)=0x0
Declare@chVarchar(100)
Set@SourceSql=@SourceSql+@StrSeprate
While(@SourceSql<>'')
Begin
Set@ch=left(@SourceSql,Charindex(@StrSeprate,@SourceSql,1)-1)
Set@temp=@temp+Convert(Varbinary,Convert(Int,@ch))
Set@SourceSql=Stuff(@SourceSql,1,Charindex(@StrSeprate,@SourceSql,1),'')
End
Return@temp
End
Go

--建表
CreatetableT
(
AVarchar(100)
)

--插入數據
InsertIntoTValues('1.1')
InsertIntoTValues('1.1.1')
InsertIntoTValues('1.1.2')
InsertIntoTValues('1.2')
InsertIntoTValues('10.1')
InsertIntoTValues('10.1.1')
InsertIntoTValues('10.1.2')
InsertIntoTValues('11.1')
InsertIntoTValues('2.1')
InsertIntoTValues('3.1')
InsertIntoTValues('4.1')

--測試
Select*fromT
orderbydbo.f_Order(A,'.')

熱點內容
pspfifa無緩存 發布:2025-01-24 16:45:13 瀏覽:164
androidhandler機制 發布:2025-01-24 16:41:10 瀏覽:935
安卓系統如何下載aov 發布:2025-01-24 16:29:53 瀏覽:572
iptables允許ip訪問 發布:2025-01-24 16:19:58 瀏覽:931
安卓80如何識別存儲卡許可權 發布:2025-01-24 16:19:54 瀏覽:231
存儲介質價格 發布:2025-01-24 16:19:18 瀏覽:150
刪除多個表sql 發布:2025-01-24 16:10:57 瀏覽:595
安卓設備版本哪裡看 發布:2025-01-24 16:06:00 瀏覽:549
編譯錯誤參數不可選 發布:2025-01-24 16:00:51 瀏覽:289
倉儲軟體用什麼伺服器 發布:2025-01-24 16:00:03 瀏覽:626