我使用Sybase IQ和具有下列存儲爲VARCHAR:SQL的Varchar轉換爲日期 - 的Sybase
01October 2010
我想這個從varchar下面的格式轉換爲date數據類型:
yyyy-mm-dd eg.2010-10-01
我該如何編寫這條SQL語句?提前致謝。
我使用Sybase IQ和具有下列存儲爲VARCHAR:SQL的Varchar轉換爲日期 - 的Sybase
01October 2010
我想這個從varchar下面的格式轉換爲date數據類型:
yyyy-mm-dd eg.2010-10-01
我該如何編寫這條SQL語句?提前致謝。
有困難。有一個原因,你不應該把日期和時間存儲爲字符串。
自從我使用Sybase以來已經有一段時間了,但我們需要做的是將字段轉換爲YYYY-MM-DD格式,然後將其傳遞給DATE()或DATETIME()函數。
讓我們假設前兩個字符總是一個月的一天,最後4個字符是年份。這意味着兩者之間的一切都是一個月。我們還假設沒有前導或尾隨空格。如果這些假設中的任何一個失敗,那麼查詢將失敗。
然後,你可以做這樣的事情:
SELECT DATE (
RIGHT(UnnamedField,4) + '-' +
CASE LTRIM(RTRIM(SUBSTRING(Unnamed,3,LEN(Unnamed) - 6)))
WHEN 'January' THEN '01'
WHEN 'February' THEN '02'
WHEN 'March' THEN '03'
.
.
.
WHEN 'December' THEN '12'
END + '-' + LEFT(UnnamedField,2)
)
FROM UnnamedTable
需要注意的是,正如其他人所提到的,日期數據類型不是格式化的數據類型。如果可能,你應該在你的應用程序中格式化它如果您必須在查詢中執行此操作,請使用CONVERT()函數。
感謝分享 - 我試過了,得到了空值......任何想法爲什麼? –
我已經更新,刪除所有空格:01October2010 –
@NickEdwards嘗試分開表達式,看看你得到了什麼。做'SELECT RIGHT(UnnamedField,4)AS Year,LEFT(UnnamedField,2)AS Day,....'看看每個字段在做什麼。您可能會獲取NULL,因爲一個或多個值是空值。 –
Sybase能夠將字符串轉換爲日期。因此,如果您使用substring
將日期提取爲IQ可以轉換的格式,那麼您可以使用convert()
函數。
下面是如何做到這一點的例子:
的樣本數據:
select
convert
(
date,
(
substring(col1, 3, charindex(' ', col1) - 2) -- Month
+ substring(col1, 1, 2) -- Day
+ substring(col1, charindex(' ', col1), 5) -- Year (include the leading space)
)
)
from #tmp1
現在,該值在:
create table #tmp1 (col1 varchar(100))
insert #tmp1 values ('01October 2010')
查詢到的值的日期轉換日期格式,可以使用convert函數將日期數據類型轉換爲字符串,並使用指定的格式。日期數據類型的默認輸出已經是yyyy-mm-dd。
編輯:考慮看看@BaconBits'的答案後,我意識到,我可以使用子功能包裝left
,right
,和date
轉換包裝簡化查詢了一下。這是一樣的邏輯;但使用簡化的包裝可能會使其更易於理解。
select
date
(
substring(col1, 3, charindex(' ', col1) - 2) -- Month
+ left(col1, 2) -- Day
+ ' ' + right(col1, 4) -- Year (include the leading space)
)
from #tmp1
謝謝 - 我只是複製和粘貼上面,它不會返回任何東西...任何想法我要去哪裏錯了? –
@NickEdwards它沒有提供任何錯誤或任何內容?它只是返回一個空白值的列?當我測試它時,它工作正常。您是使用我創建的測試表,還是修改它以與您的表一起使用?如果你正在使用我的測試表,你可以從#tmp1中選擇*來確保插入了一條記錄嗎? – RToyo
日期沒有格式,所以第二點是無關緊要的。 – Siyual
你的月份格式(mmm)和樣本數據(10)不匹配; 'mmm'是本月的3個字母的縮寫(例如,10月),而您顯示您需要2位數字(10);這是你想要的嗎?無論如何,請參閱IQ參考手冊中的轉換(,,)函數以獲取詳細信息 –
markp
我已更新原始問題。我已閱讀文檔,但掙扎...任何想法?我試過這個: SELECT CONVERT(VARCHAR,visit_date,106)FROM tablename 但得到這個錯誤:數據類型轉換是不可能的。 CONVERT參數與所需的數據類型不匹配。 –