Sybase:日期时间到字符(时间戳)



我必须将getdate()转换为char我在下面使用以下命令进行设置,以便插入批处理的时间戳设置 a_batch_id = (选择 convert(char(12), getdate(), 12))我会得到 03/09/16 的160309,但我需要的是 getdate() 获取 3/9/2016 4:44:18.486 PM 时39201644418486

我不担心yymmdd的顺序,但是是否可以如上所述添加小时和分钟。

任何接近160309444的东西都应该没问题,秒数更好。

从研究来看,您似乎正在运行Sybase,并且您不想要典型的YYYYMMDD类型的格式,但是mmddyyyyhhMIss 查看Sybase日期转换

convert(char(32), getdate(), 139 )

这将给出格式

"mmm dd yy[yy] hh:nn:ss.ssssss"

然后,您将将其包装在另一个替换命令中以去除不需要的内容。 在这种情况下,删除空格、冒号和小数点...

replace( replace( replace( convert(char(32), getdate(), 139 ), " ", "" ), ":", "" ), ".", "" )

反馈

关于将其用作"批处理 ID",请考虑将自动增量列作为 INTERNAL ID,以帮助保持与数据库中外键的连接清除。 如果要使用备用"键"查找(例如 WHEN 或搜索条件),可以将其添加到"批处理"表中。 如果你想要一些其他标识符会发生什么。 您的内部 ID 不会有任何影响。 在"批处理"表上具有日期/时间戳也允许您在报告中查询、排序和分组。

查看Sybase文档的更多内容,这也可能对您有用,因为"mmm"返回字符月份。 这更长,但应该适合您。 年份将返回 4 位数字,所以我不必明确地预先添加前导零,然后选择右侧。

例如:如果月份是 1,它将创建"01"。例如:如果月份是 11,它将创建"011",因此右边的 2 = "11"

天、小时、分钟、秒也是如此。

select
     right( '0' + trim( str( month( getdate() ))), 2 )
   + right( '0' + trim( str( day( getdate()))), 2 )
   + right(       trim( str( year( getdate() ))), 4 )
   + right( '0' + trim( str( hour( getdate()))), 2 )
   + right( '0' + trim( str( minute( getdate()))), 2 )
   + right( '0' + trim( str( second( getdate()))), 2 )

现在,如果这能让您充分利用所需的内容,那就太好了。 现在,如果您需要该毫秒值,只需在下面再添加一个 + 组件,但根据 sybase 如何处理返回值来测试和调整位置。

+ substring( convert( varchar, getdate(), 37 ), charindex( convert( varchar, getdate(), 37 ), '.' ), 4)

由于转换模式 37 返回"hh:nn:ss.ssssss",但不能保证小时、分钟、秒的值是个位数还是两位数(我可以测试),我正在寻找"."作为位置偏移量来开始子字符串并仅获得毫秒。 如果包含小数,请将 charindex() 更改为 charIndex() +1,以便将其从返回的字符串中删除。

最新更新