2014-10-20 20 views
1

如何訂購varchar字段與假定日期值: 例如:。如何使用假定的col值命令mysql varchar字段?

February 2014, April 2014, Q1 2014, Q2 2014 

我需要假設Q1 =三月,Q2 = 10份責令領域日期明智的上升(或下降),

所以應該爲了這樣的:

February 2014, Q1 2014, April 2014, Q2 2014 
+0

存儲在一個單一的行/列所有這些數據?或者是多行?你的問題並不完全清楚。 – Taryn 2014-10-20 17:22:10

+0

行/列中沒有人值,例如:'2014年2月' – Rijo 2014-10-20 17:23:50

+0

2014年2月,2014年4月,2014年第1季度,2014年第2季度是varchar列字段的4個不同值 – Rijo 2014-10-20 17:28:17

回答

0

CAST你VARCHAR值爲DATETIME值,那麼mysql ORDER BY asc/desc中的bulit將正常工作。如果您沒有一天將所有日期設置爲一個月的第一天。我不知道這些的Q值是但這是我所見過的任何日期格式,我敢肯定MySQL不會konw如何處理它要麼做。

+0

訂購2014年第一季度並將其假設爲2014年3月是真正的問題。 – Rijo 2014-10-20 17:49:28

+0

所以我假設你有這些Q值的預設值,所以你可以設置一個選擇案例或if語句,如果值包含Q1那麼tempdate ='3月'你確定Q2是10月而不是Q3?我假設Q是四分之一,四分之一不能長達六個月。 – mgrenier 2014-10-20 18:00:47

0

既然你不似乎有其他選擇識別標準排序,你也許能夠通過情況/得到你想要的東西提供了結構化訂單時結構,如...你的宿舍是沒有意義的三月十月是超過3個月外...但是讓我們假設你金融歷開始於一月,三月所以是第一季度的最後一個月...

order by 
    case when YourField like 'Jan%' then '01' 
    when YourField like 'Feb%' then '02' 
    when YourField like 'Mar%' then '03a' 
    when YourField like 'Q1%' then '03b' 
    when YourField like 'Apr%' then '04' 
    when YourField like 'May%' then '05' 
    when YourField like 'Jun%' then '06a' 
    when YourField like 'Q2%' then '06b' 
    when YourField like 'Jul%' then '07' 
    when YourField like 'Aug%' then '08' 
    when YourField like 'Sep%' then '09a' 
    when YourField like 'Q3%' then '09b' 
    when YourField like 'Oct%' then '10' 
    when YourField like 'Nov%' then '11' 
    when YourField like 'Dec%' then '12a' 
    when YourField like 'Q4%' then '12b' end 

但更有效的方式可能是有一個查詢什麼月份/季度的表格代表您想要的訂單......然後加入到此。我有「A」和「B」版本,因此,如果您的數據確實有兩三月和Q1項,三月份將首先上市,然後Q1。你不能只使用一個月的數字字面量,因爲Q總是會在最後排序,而不會給你你需要的東西。

另外,如果你的財務日曆不會在1月1日開始,那麼你的第一季度可能會開始如三月,四月,五月第一季度,鈞,七月,八月的第二季度,等等。

而且,我的情況下/排序時爲「01」,「02」,等等值,從而它們將總是「10」,「11」和「12」的條目之前。

0

我沒有DB在那裏我可以測試這個,我也不有MySQL的安裝,以便把這個作爲不是正好語法正確的解決更多的僞代碼,但你可能想嘗試這樣的事情......

SELECT *, CAST((CASE 
    WHEN CONTAINS(dateField, 'Q1') THEN 'March' + SUBSTRING(dateField) 
    WHEN CONTAINS(dateField, 'Q2') THEN 'October' + SUBSTRING(dateField) 
    ETC... 
    ELSE datefield) AS DATETIME) as Date1 
FROM mytable 
ORDER BY Date1