sql 数据库 日期时间的转换

jmxb123 2008-11-19 02:31:52
sql 数据库中有一字段 数据类型bigint 长度8 允许空


从这字段中的数据摘两个
1226706555156

1226879820703

用别人已经做好的软件查看显示为
2008-11-15 7:49:15

2008-11-17 7:57:00

请问怎么转换成这样的日期时间的 最好有比较全的代码 我基本算是白痴级别的
...全文
367 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
jmxb123 2008-11-20
  • 打赏
  • 举报
回复
但我确实从别人已编好的程序中看到这个问题肯定能解决

通过sql事件探查器中看到的 select * from tb where 条件... 直接把bigint弄出来 至于怎么在dbgrid中显示成日期时间 我就不知道了

declare @P1 int
set @P1=68
exec sp_prepare @P1 output, N'@P1 bigint', N'SELECT * FROM tb WHERE (time1 < @P1)', 1
select @P1
llh6795 2008-11-20
  • 打赏
  • 举报
回复
路过
僵哥 2008-11-19
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 jmxb123 的回复:]
以前就是用dateadd() 但这样查出来的数据不能进行操作

如删除某条记录 会提示没有这条记录的

假如删除时,我认为是根据as生成的新列中的日期时间的特征和直接从数据库中读出来的东西一块去从数据库中查找的 当然找不到了 这怎么能删除呢
[/Quote]
那就只能在数据库表当中增加一列,然后把数据写入该列当中,否则永远也无法解决你所说的问题,即使使用View.
jmxb123 2008-11-19
  • 打赏
  • 举报
回复
以前就是用dateadd() 但这样查出来的数据不能进行操作

如删除某条记录 会提示没有这条记录的

假如删除时,我认为是根据as生成的新列中的日期时间的特征和直接从数据库中读出来的东西一块去从数据库中查找的 当然找不到了 这怎么能删除呢
僵哥 2008-11-19
  • 打赏
  • 举报
回复
如果不想那么类,就在代码当中直接写,也并不是不可以

clientdataset1.CommandText :='SELECT l,r,dateadd(second ,t+datediff(second,getutcdate(),getdate()),{ts'1970-01-01 00:00:00'})
as t from tb';//假定t即为该时间字段
僵哥 2008-11-19
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 jmxb123 的回复:]
看到点东西 是不是在SQL服务器上啊 要操作的库中有个 “用户自定义的函数” 在这写吗
怎么这东西越弄越麻烦
[/Quote]
是的.或者直接在查询分析器当中执行,从而创建永远性的一个函数.
yf520gn 2008-11-19
  • 打赏
  • 举报
回复
你就在查询分析器里写就好,我那个是个自定义的SQL函数~
你在SQL语句里调用就好~~
jmxb123 2008-11-19
  • 打赏
  • 举报
回复
看到点东西 是不是在SQL服务器上啊 要操作的库中有个 “用户自定义的函数” 在这写吗
怎么这东西越弄越麻烦
jmxb123 2008-11-19
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 unsigned 的回复:]
SQL codecreate function time_t_to_datetime(@time_t bigint)
returns Datetime
as
begin
return dateadd(second ,@time_t,{ts'1970-01-01 08:00:00'})
end
[/Quote]
sql中的自定义函数在哪定义
僵哥 2008-11-19
  • 打赏
  • 举报
回复
当然,如果不想写死时区,而换用数据库服务器的系统时区的话,可以把上面的SQL Function改为
create function time_t_to_datetime(@time_t bigint)
returns Datetime
as
begin
return dateadd(second ,@time_t+datediff(second,getutcdate(),getdate()),{ts'1970-01-01 00:00:00'})
end
僵哥 2008-11-19
  • 打赏
  • 举报
回复
需要注意
{ts'1970-01-01 08:00:00'}
这个时间常量的定义,本来unix time是指从1970年1月1日0时0分0秒以来的秒数.准确的应该是
{ts'1970-01-01 00:00:00'}
但是这是GMT时间,如果需要转换为本地时间则需要增加时区,比如我们常的是+8时区,所以增加了8小时间.
另外,时间function的定义有一定的使用范围限制,所以需要指定Owner(本例当中,我使用的是dbo的角色).
僵哥 2008-11-19
  • 打赏
  • 举报
回复
create function time_t_to_datetime(@time_t bigint)
returns Datetime
as
begin
return dateadd(second ,@time_t,{ts'1970-01-01 08:00:00'})
end

测试:
select dbo.time_t_to_datetime(cast(1226706555156 / 1000 as bigint))


clientdataset1.CommandText :='SELECT l,r,dbo.time_t_to_datetime(t / 1000)) as t from tb';//假定t即为该时间字段
jmxb123 2008-11-19
  • 打赏
  • 举报
回复
我不明白你那个函数怎么调用 在哪定义
yf520gn 2008-11-19
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 jmxb123 的回复:]
基本可以用一个函数搞定了
function gettime(a:int64):Tdatetime;
begin
result:=unixtodatetime(a div 1000)+8/24;
end;
请问如何在SQL语句中调用它 三层的

clientdataset1.Close ;
clientdataset1.CommandText :='SELECT l,r from tb';//补充这就行了
clientdataset1.Open ;

l r这两个字段可以显示出来 但调用那个函数想显示时间字段就不行了 说没定义 偶不会在这里面调用函数 会的说一声
觉得楼上说…
[/Quote]
你还是去SQL SERVER区去看看~你既然想通过SQL来实现,就最好去那里了!SQL 貌似调用不了DELPHI的函数~
jmxb123 2008-11-19
  • 打赏
  • 举报
回复
基本可以用一个函数搞定了
function gettime(a:int64):Tdatetime;
begin
result:=unixtodatetime(a div 1000)+8/24;
end;
请问如何在SQL语句中调用它 三层的

clientdataset1.Close ;
clientdataset1.CommandText :='SELECT l,r from tb';//补充这就行了
clientdataset1.Open ;

l r这两个字段可以显示出来 但调用那个函数想显示时间字段就不行了 说没定义 偶不会在这里面调用函数 会的说一声
觉得楼上说得有点像 不过还是不会用
yf520gn 2008-11-19
  • 打赏
  • 举报
回复

create function fun()
returns bigint
as
begin
declare @unixtime bigint
declare @dt datetime
select @dt = currentTime from viw
select @unixtime = CONVERT(bigint,DATEDIFF(mi, '1970-01-01 00:00:00 ', @dt)) * 60 + DATEPART(ss,@dt)
return @unixtime
end
go
jmxb123 2008-11-19
  • 打赏
  • 举报
回复
好 我先试试
huayufei 2008-11-19
  • 打赏
  • 举报
回复
这个是UNIX时间,可以用函数转换过来
DateTime:=UnixToDateTime(1226879820)+8/24;

703应该是一个后缀,你测试一下试试。

记得加分~~~~~~~
xcc610 2008-11-19
  • 打赏
  • 举报
回复
看不懂
auqfiudh 2008-11-19
  • 打赏
  • 举报
回复
僵哥变老虎了啊....
加载更多回复(3)

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧