SQL Varchar 转换为日期 - Sybase

SQL Varchar convert to Date - Sybase

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

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() 函数。

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 函数将日期数据类型转换为字符串,使用您指定的格式。日期数据类型的默认输出已经是 yyyy-mm-dd。


编辑: 看了@BaconBits 的回答后,我意识到我可以通过使用子字符串函数包装器来稍微简化查询 leftright,以及 date 的转换包装器。这是相同的逻辑;但使用简化的包装器可能更容易理解。

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