我将/
分隔的数字数据作为字符串,类似于日期字符串,如:
('95/05/13'), ('900/04/15'), ('89/05/15'), ('189/07/15')
我需要ORDER BY
年前(第三部分),然后是月(第二部分),并在结束日/数字(第一部分)按此顺序:
('189/07/15'), ('89/05/15'), ('900/04/15'), ('95/05/13')
我正在使用SQL Server 2008.
我试过了:
CASE
WHEN PatIndex('%[/]%',invoiceid) > 0
THEN LEFT(invoiceid, PatIndex('%[/]%', invoiceid) - 1)
ELSE invoiceid
END * 1 DESC,
CASE
WHEN PatIndex('%[/]%',REVERSE(invoiceid)) > 0
THEN RIGHT(invoiceid, PatIndex('%[/]%', REVERSE(invoiceid)) - 1)
ELSE NULL
END * 1 DESC
但它只根据第一个数字给我结果。
答案 0 :(得分:0)
如果您使用的是SQL Server,则可以使用
之类的内容select * from [YourTable]
order by PARSENAME(REPLACE([YourColumn], '/', '.'), 1) desc,
PARSENAME(REPLACE([YourColumn], '/', '.'), 2) desc,
PARSENAME(REPLACE([YourColumn], '/', '.'), 3) desc
<强>更新强> 这只是我的小提琴(SQL Server 2008)
SELECT invoiceid FROM Invoice
ORDER BY PARSENAME(REPLACE([invoiceid], '/', '.'), 1) desc,
PARSENAME(REPLACE([invoiceid], '/', '.'), 2) desc,
PARSENAME(REPLACE([invoiceid], '/', '.'), 3) desc
PARSENAME应该用于解析对象名称和检索服务器名称,数据库名称等。但是,基本上它的作用是,它按“。”分割。并以相反的顺序给出零件(最后一部分......第一部分)。它只能分成四个部分!
我所做的就是用'。'替换'/',然后用parsename分割字符串。例如123/45/678 =&gt; 123.45.678 =&gt; 678,45,123。然后我根据需要使用这些部件来订购结果! (这不是最干净的解决方案,但可以满足这种有限的要求。)