在英国的MS-SQL数据库生成的日期格式原来的:'27/05/2013 10:05:51'要改为什么内容,才能在各种日期不同的数据库中正确插入呢?

javamy015 2013-07-21 10:46:38
我自己写了一个生成SQL插入语句的代码,生成了脚本,但在是在处理不同日期格式的数据库的时候有问题
如以下插入语句是我在英国服务器的SQL生成的日期格式为“dd/MM/dddd HH:mm:ss”

INSERT INTO Pub_User ([Guid], [Version], [CreateTime]) VALUES (N'794bd01a20b042ca9c02caa24761cd75', 46, '27/05/2013 10:05:51')

我这里的'27/05/2013 10:05:51'是直接从表格中用C# ToString出来的
但是他插入我的中文日期数据格式为 "yyyy-MM-dd HH:mm:ss"的格式的时候上面的插入语句报错:

从 char 数据类型到 datetime 数据类型的转换导致 datetime 值越界。

那正确的的生成的日期插入脚本为什么呢?
也就是说:在英国的数据库生成的日期格式原来的:'27/05/2013 10:05:51'
要改为什么内容,才能在各种日期不同的数据库中正确插入呢?

万分感谢
...全文
180 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
Vidor 2013-07-21
  • 打赏
  • 举报
回复
select convert(datetime, '27/05/2013 10:05:51', 103) .. VALUES (N'794bd01a20b042ca9c02caa24761cd75', 46, convert(datetime, '27/05/2013 10:05:51', 103))
Andy__Huang 2013-07-21
  • 打赏
  • 举报
回复
改用变量: declare @CreateTime datetime set @CreateTime= '27/05/2013 10:05:51' INSERT INTO Pub_User ([Guid], [Version], [CreateTime]) VALUES (N'794bd01a20b042ca9c02caa24761cd75', 46, @CreateTime) 你试试看.
javamy015 2013-07-21
  • 打赏
  • 举报
回复
最后用这种格式 要跨语言平台,使用语言无关的ISO格式:yyyy-MM-ddThh:mm:ss.sss 明天给他们更新看可不可以
Andy__Huang 2013-07-21
  • 打赏
  • 举报
回复
引用 13 楼 Vidor 的回复:
[quote=引用 9 楼 hdhai9451 的回复:] 使用变量, 不需要知道要插入的数据库用的是哪种日期格式 select getdate() /* 2013-07-21 15:40:23.623 */ create table tb(xdate datetime) declare @date datetime set @date='10/05/2013 10:05:51' insert into tb values(@date) select * from tb drop table tb /* 2013-10-05 10:05:51.000 */
我不知道这份自信从何而来,既然这么有自信,测试为什么将27/05/2013改为10/05/2013呢? 使用变量或直接insert没有实质性的区别,都是将一个字符串转换为datetime,如何将字符串正确解析为datetime,依赖于language设置,岂是一个中间变量可以解决的。 要跨语言平台,使用语言无关的ISO格式:yyyy-MM-ddThh:mm:ss.sss [/quote] 我就是直接取上一楼(即楼主回复提到的日期)的数据做测试,哪有为什么将日期修改? 就是没有多做一下测试
Vidor 2013-07-21
  • 打赏
  • 举报
回复
引用 3 楼 javamy015 的回复:
楼上的,可以,谢谢 但我如何知道,他的数据库的时间类型是103呢?
MSDN CAST 和 CONVERT 使用日期和时间数据
Vidor 2013-07-21
  • 打赏
  • 举报
回复
引用 9 楼 hdhai9451 的回复:
使用变量, 不需要知道要插入的数据库用的是哪种日期格式 select getdate() /* 2013-07-21 15:40:23.623 */ create table tb(xdate datetime) declare @date datetime set @date='10/05/2013 10:05:51' insert into tb values(@date) select * from tb drop table tb /* 2013-10-05 10:05:51.000 */
我不知道这份自信从何而来,既然这么有自信,测试为什么将27/05/2013改为10/05/2013呢? 使用变量或直接insert没有实质性的区别,都是将一个字符串转换为datetime,如何将字符串正确解析为datetime,依赖于language设置,岂是一个中间变量可以解决的。 要跨语言平台,使用语言无关的ISO格式:yyyy-MM-ddThh:mm:ss.sss
Flyinsky1 2013-07-21
  • 打赏
  • 举报
回复
感觉是系统默认的问题,比如说以下语句
drop table aaatime
go
create table aaatime
(timetest datetime)
insert into aaatime values('27/05/2013 10:05:51')--*
insert into aaatime values('27/05/13 10:05:51')
insert into aaatime values('01/02/32 10:05:51')---*
insert into aaatime values('32/02/01 10:05:51')
insert into aaatime values('05/27/2013 10:05:51')
insert into aaatime values('2013-05-29 10:05:51')
insert into aaatime values(convert(datetime,'01/02/32 10:05:51',3))
insert into aaatime values(convert(datetime,'28/05/2013 10:05:51',103))
select * from aaatime
产生的结果是:
务器: 消息 242,级别 16,状态 3,行 1
从 char 数据类型到 datetime 数据类型的转换导致 datetime 值越界。
语句已终止。

(所影响的行数为 1 行)

服务器: 消息 242,级别 16,状态 3,行 1
从 char 数据类型到 datetime 数据类型的转换导致 datetime 值越界。
语句已终止。

(所影响的行数为 1 行)


(所影响的行数为 1 行)


(所影响的行数为 1 行)


(所影响的行数为 1 行)


(所影响的行数为 1 行)


(所影响的行数为 6 行)
可以试试把底下这句,将3改为1,用美国式,看看是几月几日。32改成03,再把最后一个3改成11或1或3,试试,挺有趣的 insert into aaatime values(convert(datetime,'01/02/32 10:05:51',3))
Leon_He2014 2013-07-21
  • 打赏
  • 举报
回复
这个跟语言sql server 服务器端语言有关 可以根据以下查询,知道年月日摆放顺序,查看dateformat字段

select langid,dateformat
from sys.syslanguages
where name=@@LANGUAGE
Andy__Huang 2013-07-21
  • 打赏
  • 举报
回复
所以使用变量,就是在于它能够自动转换成系统默认的格式
Andy__Huang 2013-07-21
  • 打赏
  • 举报
回复
使用变量, 不需要知道要插入的数据库用的是哪种日期格式 select getdate() /* 2013-07-21 15:40:23.623 */ create table tb(xdate datetime) declare @date datetime set @date='10/05/2013 10:05:51' insert into tb values(@date) select * from tb drop table tb /* 2013-10-05 10:05:51.000 */
javamy015 2013-07-21
  • 打赏
  • 举报
回复
set @CreateTime= '10/05/2013 10:05:51' 问题是,当用变量的时候,你这里设置的参数中的时间 MSSql怎么知道他是MM/dd/yyyy 还是 dd/MM/yyyy 啊,所以我现在得先知道当前的要插入的数据库到底用的是哪种日期格式 谢谢
Andy__Huang 2013-07-21
  • 打赏
  • 举报
回复
引用 4 楼 javamy015 的回复:
http://www.cnblogs.com/yuzhixue/articles/533632.html 我在这里看到了各种类型的时间代码 但是我如何知道现在SQL是用哪种日期类型呢(脚本取得)? 谢谢
之所以叫你用变量去代替,我也遇到过这样的问题,而且就在中国和香港的,时间格式不一样,如果不用变量,用string去Format格式化,本地永远看不到错误,所以叫你定义一个datetime变量,它会自动转换成服务器默认的时间格式,不会出错. 你如果你格式化日期,哪天它换了日期格式,一样会报错. 所以建议你用时间变量去代替字符串值
javamy015 2013-07-21
  • 打赏
  • 举报
回复
回楼上的,我只要是要知道当前MSSQL是用的哪个编码的日期类型 如我英国服务器 Select 日期类型? 返回 103 本发服务器 Select 日期类型? 返加 120 这里这个“日期类型?”是哪个函数 谢谢
Flyinsky1 2013-07-21
  • 打赏
  • 举报
回复
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
Without century (yy) With century (yyyy) Standard Input/Output** 3 103 British/French dd/mm/yy * The default values (style 0 or 100, 9 or 109, 13 or 113, 20 or 120, and 21 or 121) always return the century (yyyy). ** Input when converting to datetime; output when converting to character data. *** Designed for XML use. For conversion from datetime or smalldatetime to character data, the output format is as described in the table. For conversion from float, money, or smallmoney to character data, the output is equivalent to style 2. For conversion from real to character data, the output is equivalent to style 1. ****Hijri is a calendar system with several variations, of which Microsoft® SQL Server™ 2000 uses the Kuwaiti algorithm. 如果是美国,那么是1,或101?2楼
引用 2 楼 Vidor 的回复:
select convert(datetime, '27/05/2013 10:05:51', 103) .. VALUES (N'794bd01a20b042ca9c02caa24761cd75', 46, convert(datetime, '27/05/2013 10:05:51', 103))
javamy015 2013-07-21
  • 打赏
  • 举报
回复
http://www.cnblogs.com/yuzhixue/articles/533632.html 我在这里看到了各种类型的时间代码 但是我如何知道现在SQL是用哪种日期类型呢(脚本取得)? 谢谢
javamy015 2013-07-21
  • 打赏
  • 举报
回复
楼上的,可以,谢谢 但我如何知道,他的数据库的时间类型是103呢?

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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