SQL Varchar转换为日期 - Sybase

时间:2017-06-29 15:17:47

标签: sql date sybase varchar sybase-iq

我正在使用Sybase IQ并将以下内容存储为varchar:

01October 2010

我想使用以下格式将其从varchar转换为date数据类型:

yyyy-mm-dd   eg.2010-10-01 

我将如何编写此SQL语句?提前谢谢。

2 个答案:

答案 0 :(得分:0)

有困难。因此,您永远不应将日期和时间存储为字符串。

自从我使用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()函数。

答案 1 :(得分:0)

Sybase能够将字符串转换为日期。因此,如果您使用substring将日期提取为IQ可以转换的格式,那么您只需使用convert()函数。

以下是如何操作的示例:

示例数据:

create table #tmp1 (col1 varchar(100))
insert #tmp1 values ('01October 2010')

查询将值转换为日期:

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

现在该值采用日期格式,您可以使用convert函数将date数据类型转换为字符串,使用指定的格式。 date数据类型的默认输出是yyyy-mm-dd。

修改:看了@ BaconBits'回答,我已经意识到我可以通过使用子串函数包装器leftrightdate的转换包装器来简化查询。它的逻辑是一样的;但是使用简化的包装可能会使它更容易理解。

select 
    date
        (
            substring(col1, 3, charindex(' ', col1) - 2) -- Month
            + left(col1, 2) -- Day
            + ' ' + right(col1, 4) -- Year (include the leading space)
        )
from #tmp1