我将日期/时间数据以如下格式插入CHAR列:' 6/4/2015 2:08:00 PM
'。我希望这应该自动转换为格式:' 2015-06-04 14:08:00
',这样就可以在查询中使用,因为DATETIME的格式是YYYY-MM-DD hh:mm:ss.fffff
。
如何转换?
假设您已经将数据存储为字符串格式(CHAR或VARCHAR),那么您必须决定如何使其作为DATETIME YEAR to SECOND值工作。为了计算效率和存储效率,最好将值存储为DATETIME YEAR to SECOND值,在输入时转换它,(如果需要)在输出时重新转换。但是,如果您将经常显示该值而不进行计算(包括比较或排序),那么可能可以使用依赖于语言环境的洛可可字符串表示法。
将字符串转换为DATETIME值的关键函数是TO_DATE
。您还需要查看TO_CHAR
函数,因为它记录了您需要使用的格式代码,并且因为您将使用它将DATETIME值转换为原始格式。
假设列名是time_string
,那么您需要使用:
TO_DATE(time_string, '%m/%d/%Y %I:%M %x') -- What goes in place of x?
转换为DATETIME YEAR to SECOND -或者DATETIME YEAR to MINUTE -值(必要时可以像EXTEND一样进一步操作)。
我个人几乎肯定会将数据库列转换为DATETIME YEAR to SECOND,必要时,在输出时使用TO_CHAR
转换为字符串格式。列名现在应该是time_value
(为了具体起见):
TO_CHAR(time_value, '%m/%d/%Y %I:%M %x') -- What goes in place of x?
所引用的手册页不会立即导致格式字符串的完整规范。我认为一个相关的参考文献是GL_DATETIME
环境变量,但是要找到它,需要对Informix产品集的奥秘有更多的了解(它是而不是,任何人都应该想到的第一件事—甚至不是我!)。如果这是正确的(它可能是),那么%p
和%r
中的一个应该在我的例子中代替%x
。我必须在我的机器上重新配置Informix,以便能够对它进行测试。