我必须将getdate()转换为char 我使用下面的设置来插入批处理的时间戳 设置a_batch_id =(选择convert(char(12),getdate(),12)) 我会在03/09/16获得160309但我需要的是39201644418486而getdate()获取3/9/2016 4:44:18.486 PM
我并不担心yymmdd的订单,但是如上所述可以添加小时和分钟。
任何接近160309444的东西都应该没问题,几秒钟就会更好。
答案 0 :(得分:1)
从研究开始,您似乎正在运行Sybase,并且您不希望使用典型的YYYYMMDD格式,但mmddyyyyhhMIss Look at Sybase Date Conversions
convert(char(32), getdate(), 139 )
将提供
的格式"mmm dd yy[yy] hh:nn:ss.ssssss"
然后,您可以将其包装在另一个替换命令中以去除不需要的内容。在这种情况下,删除空格,冒号和小数点......
replace( replace( replace( convert(char(32), getdate(), 139 ), " ", "" ), ":", "" ), ".", "" )
反馈
关于将其用作"批次ID",请考虑将自动增量列作为内部ID,以帮助保持数据库中外键的连接清除。如果你想要一个替代的"键"查找,例如WHEN或搜索条件,是的,将其添加到"批处理"表。如果你想要一些其他标识符会发生什么。您的内部ID不会产生任何影响。在"批次"上添加日期/时间戳。 table允许您在报告中查询,排序,分组。
查看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,以便从返回的字符串中删除它。