sql一:
select
*from tabname where1=
1order
by charindex(rtrim(cast(列名 as
nchar))
,'北京,上海,廣州'
)
sql二:
select
*from tabname where id in(1
,2,3
,4,5
)order
by charindex(
','+
convert
(varchar
,id)
+','
,'2,4,5,1,3'
)
sql三:
select
*from tabname where id in(1
,2,3
,4,5
)order
by charindex(rtrim(cast(id as
nchar))
,'2,4,5,1,3'
)
select id,invno from t_swipe
where invno in
('bb10'
,'sc10'
,'sc11'
,'bb11'
)order
by charindex(
','+
convert
(varchar
,invno)
+','
,'bb10,sc10,sc11,bb11,'
)
這裡面有幾點需要注意的
1:order by
後面的 各個invno
裡是沒有單引號,in
裡面有
2:order by 後面bb11
的逗號不能省略,(一開始沒寫的時候,本來應該在最後乙個的跳到第二個去了)
昨天在q群上面有個朋友提出個sql查詢的問題尋求解決方法,結果小查了一下資料然後幫他解決了問題,算是學了點小技巧,這裡記錄一下^^。
問題如下,在sqlserver有乙個這樣的sql查詢,select * from product where id in (12490,12494,12486)
。在乙個名為project
的表中對自增欄位id
做in
查詢,他希望查出來的記錄id欄位按照'12490','12494','12486'
這個順序來排,但是很不幸的是查出來後的記錄是按照id的進行正排序,這並不符合他的要求。
查出的結果如下:
由於對sql實在是不熟悉,於是我查了點資料,發現可以用sqlserver的charindex
方法來完成這一實現,最終給出如下的答案,
select
*from product where id in
(12490
,12494
,12486
)order
by charindex(
','+
convert
(varchar(10
),id)
+','
,',12490,12494,12486,'
)
查詢的結果如下:
說明:這裡用到乙個小技巧,就是把id轉成字串,然後在兩邊加上",",組合乙個字串,用逗號隔開每個id,然後查詢id的下標值(之所以兩邊加上","是因為查詢下標的時候類似id=123
和id=1234
會查到同乙個下標,網上給出的類似答案幾乎都沒有注意到這一點!!!)。如果對charindex
這個方法不看不明的話可以看下以下這個查詢,估計就明白了。
select product.
*, charindex(
','+
convert
(varchar(10
),id)
+','
,',12490,12494,12486,'
)as idindex
from product
where id in
(12490
,12494
,12486
)order
by idindex
查詢結果如下(請看第二個表,第乙個表用來做對比),這裡也可以發現乙個細節,就是index
是從1
開始的,而不是0
。 hive 按指定順序排序 按指定規則給資料排序。
在excel中,不可能將生活中所有規則都寫入到excel的內建資料裡。生活中,往往要根據實際情況指定規則來排列順序。下例裡,要求按 校長 副書記 副校長 政教主任 德育主任 教務主任 班主任進行排序。怎麼辦?首先 單擊職業列的第1個職務資料b2,右鍵選擇排序 自定義排序。其次 在上述開啟的排序對話方...
如何按指定的順序獲取資料
測試table createtabletable1 idint,namechar insertintotable1 select1,q unionallselect2,r unionallselect3,3 unionallselect4,5 要求按指定的id順序 比如2,1,4,3 排列獲取tab...
如何按指定的順序獲取資料
測試table create table table1 id int,name char insert into table1 select 1,q union all select 2,r union all select 3,3 union all select 4,5 要求按指定的id順序 比...