請問如何修改SQL2008R2裏面默認的日期輸出格式

贾斯提斯 2015-07-29 09:52:52
加精
起因:本人接手要負責維護公司内某套軟件,現在這軟件出現了問題,而源代碼沒有,只有通過SQL跟蹤,發現其中有一段如下:
( where '13/6/2015' between date_start and date_end )
報錯就是字符串轉換為日期格式錯誤。
經詢問,服務器曾經重裝過一次,所以我有理由懷疑原先安裝的時候SQL默認的日期輸出格式是dmy格式,而重裝后默認輸出格式變成了mdy格式。由於沒有源代碼,( where '13/6/2015' between date_start and date_end ) 這一段是寫死了在程序裏的。

所以,請問有什麽辦法可以修改SQL2008R2裏面默認的日期輸出格式,可以使得select convert(date,'13/6/2015')這個語句不會報轉換錯誤,或者有什麽辦法使得select getdate()的輸出格式是“29/07/2015”?

謝謝。
...全文
2423 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
wwwiiservicepcom 2015-11-05
  • 打赏
  • 举报
回复
**_是的_ 你说的很有道理**
guguda2008 2015-10-30
  • 打赏
  • 举报
回复
不是很懂到底是哪的问题,是这个数据库还原到任何机器都会出这个问题,还是这台机器上的所有数据库都有这个问题? 如果是前者,可以尝试新建数据库后把表结构和数据全部复制过去。 如果是后者,试试换台机器还原一下数据库。
misterliwei 2015-10-28
  • 打赏
  • 举报
回复
把登录用户的默认语言改成 "british english"等符合DMY格式的语言(可以通过sys.syslanguages查看)

贾斯提斯 2015-08-06
  • 打赏
  • 举报
回复
再次請問,誰知道用什麽方法可以通過修改SQL的設置來改變SQL的日期輸出格式? 不用set dateformat 和 set language,就可以讓SQL接受'13/6/2015'是個合法日期呢?
贾斯提斯 2015-08-03
  • 打赏
  • 举报
回复
引用 16 楼 Tiger_Zhao 的回复:
[Quote=引用 12 楼 eeprom 的回复:](where '2015-1-6' between date_start and date_end) (where '1/6/2015' between date_start and date_end)[/Quote] 都跟踪到两种格式了还在说程序写死格式! 逻辑不是一个次元的。
也許是我表述得不夠準確,但是意思是2015年6月13號這個實際的日期被程序用固定的格式轉換成了字符串'2015-13-6'或者'13/6/2015'。而這個字符串不能被SQL認可。
贾斯提斯 2015-07-29
  • 打赏
  • 举报
回复
引用 11 楼 Tiger_Zhao 的回复:
[Quote=引用 9 楼 eeprom 的回复:]( where '13/6/2015' between date_start and date_end ) 這一段是程序寫死了的。[/Quote] 这说明不了什么? 你无法证明13/6/2015在程序中就是一个常量字符串,而不是用DateTime.ToString()转换过来的字符串。
謝謝,由於沒有源代碼,我確實無法證明,但從種種跡象來看,我有理由懷疑,源代碼中是寫死了dd/MM/yyyy這樣的輸出格式的。 根據是,我是把數據庫備份下來我自己電腦,我本地的格式是‘yyyy-MM-dd’,進去操作的時候,馬上有messagebox提示‘13/6/2015日期轉換錯誤’。而後臺SQL跟蹤裏,出現的語句是從(where '2015-1-6' between date_start and date_end),(where '2015-2-6' between date_start and date_end)一直到(where '2015-12-6' between date_start and date_end)就截止了。 當我更改本地操作系統的時間格式為‘dd/MM/yyyy’,進去操作也報錯,但不再是提示‘13/6/2015日期轉換錯誤’,而是提示“从字符串转换日期和/或时间时,转换失败。”後臺SQL跟蹤裏顯示的則是從(where '1/6/2015' between date_start and date_end)一直到(where '12/6/2015' between date_start and date_end)截至。 根本問題就是SQL對於隱式轉換'13/6/2015'為日期失敗。 更改操作系統的日期格式,解決不了這個問題。
Tiger_Zhao 2015-07-29
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 eeprom 的回复:]( where '13/6/2015' between date_start and date_end ) 這一段是程序寫死了的。[/Quote]
这说明不了什么?
你无法证明13/6/2015在程序中就是一个常量字符串,而不是用DateTime.ToString()转换过来的字符串。
贾斯提斯 2015-07-29
  • 打赏
  • 举报
回复
引用 8 楼 Landa_Alice 的回复:
[quote=引用 6 楼 eeprom 的回复:] 謝謝各位,但請看,操作系統的日期格式對SQL的輸出沒任何影響。
你后面的103 为什么不添加呢 [/quote] 謝謝,由於沒有源程序,'13/6/2015'是在程序裏寫死了的,加不了的。
贾斯提斯 2015-07-29
  • 打赏
  • 举报
回复
引用 7 楼 Tiger_Zhao 的回复:
反向思考。 是不是软件因为程序的默认语言/系统的日期格式的变更导致了SQL中日期从原先的2015-6-13变成了13/6/2015? 改下运行软件机器的系统日期格式试试。 用 AppLoc 工具更改下软件启动时的语言试试。
服務器是因為重裝過,所以SQL的默認日期格式變了。改變操作系統的日期格式無論是變成YMD還是DMY還是MDY,SQL的日期格式都是根據默認的YMD來輸出。除非是set dateformat DMY,這樣就可以強制讓SQL改變日期格式,但這只能存在于單次的查詢窗口中。 ( where '13/6/2015' between date_start and date_end ) 這一段是程序寫死了的。無法用convert的。 所以想問,通過怎樣設置,讓SQL隱式轉換能接受'13/6/2015'這是個日期。
Pact_Alice 2015-07-29
  • 打赏
  • 举报
回复
引用 6 楼 eeprom 的回复:



謝謝各位,但請看,操作系統的日期格式對SQL的輸出沒任何影響。

你后面的103 为什么不添加呢
Tiger_Zhao 2015-07-29
  • 打赏
  • 举报
回复
反向思考。
是不是软件因为程序的默认语言/系统的日期格式的变更导致了SQL中日期从原先的2015-6-13变成了13/6/2015
改下运行软件机器的系统日期格式试试。
用 AppLoc 工具更改下软件启动时的语言试试。
贾斯提斯 2015-07-29
  • 打赏
  • 举报
回复



謝謝各位,但請看,操作系統的日期格式對SQL的輸出沒任何影響。

道玄希言 2015-07-29
  • 打赏
  • 举报
回复

select convert(date, '13/6/2015', 103)  as dt     --  將日期字符串转成系统当前格式日期

select convert(nvarchar(10), getdate(),103) as str      -- 將日期转化为指定格式的字符串
MSSQL获取当前日期及格式 select getdate()--获取完整日期 具体到毫秒 2012-02-15 11:41:24.903 select convert(varchar,getdate(),120) --具体到秒 2012-02-15 11:46:04 select convert(varchar,getdate(),121) 2012-02-15 11:46:43.810 select convert(nvarchar,getdate(),20) 2012-02-15 11:45:42 select convert(nvarchar,getdate(),21) 2012-02-15 11:47:37.340 select convert(nvarchar,getdate(),22) 02/15/12 11:48:01 AM select convert(nvarchar,getdate(),23) 2012-02-15 select convert(nvarchar,getdate(),24) 11:48:42 select convert(nvarchar,getdate(),25) 2012-02-15 11:49:00.030 select convert(nvarchar,getdate(),100) 02 15 2012 11:51AM select convert(nvarchar,getdate(),101) 02/15/2012 select convert(nvarchar,getdate(),102) 2012.02.15 select convert(nvarchar,getdate(),103) 15/02/2012 select convert(nvarchar,getdate(),104) 15.02.2012 select convert(nvarchar,getdate(),105) 15-02-2012 select convert(nvarchar,getdate(),106) 15 02 2012 select convert(nvarchar,getdate(),107) 02 15, 2012 select convert(varchar(10),getdate(),108) --时间 11:47:15 select convert(nvarchar,getdate(),109) 02 15 2012 11:54:16:250AM select convert(nvarchar,getdate(),110) 02-15-2012 select convert(nvarchar,getdate(),111) 2012/02/15 select convert(nvarchar,getdate(),112) 20120215 select convert(nvarchar,getdate(),113) 15 02 2012 11:55:18:293 select convert(nvarchar,getdate(),114) 11:55:32:373
道玄希言 2015-07-29
  • 打赏
  • 举报
回复
这应该是软件对日期时间处理考虑不全面的问题。

尝试修改你软件运行的机器和服务器上的日期事件格式为你需要的格式。
打开控制面板-- 区域和语言,重新设置。



保证你软件运行的客户机跟数据库服务器上的设置一致。

如果服务器以前已经有时间数据, 如果时间数据还被采用了varchar 这种字符串的形式保存,
那就得將时间格式设置成这个时间字符串格式的形式。



贾斯提斯 2015-07-29
  • 打赏
  • 举报
回复
修改操作系統的時間格式,對SQL的輸出沒有任何影響。
许晨旭 2015-07-29
  • 打赏
  • 举报
回复
修改区域语言设置 或者服务器的日期格式试试 控制面板--时钟语言区域
贾斯提斯 2015-07-29
  • 打赏
  • 举报
回复
set dateformat 和 set language 都只是在單個查詢裏起作用,無法解決本問題。
Tiger_Zhao 2015-07-29
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 eeprom 的回复:](where '2015-1-6' between date_start and date_end)
(where '1/6/2015' between date_start and date_end)[/Quote]
都跟踪到两种格式了还在说程序写死格式!
逻辑不是一个次元的。
贾斯提斯 2015-07-29
  • 打赏
  • 举报
回复
引用 14 楼 Tiger_Zhao 的回复:
[Quote=引用 12 楼 eeprom 的回复]而後臺SQL跟蹤裏,出現的語句是從(where '2015-1-6' between date_start and date_end)[/Quote] 这说明是用DateTime.ToString()按当前日期格式转换的。 [Quote=引用 12 楼 eeprom 的回复]馬上有messagebox提示‘13/6/2015日期轉換錯誤’。[/Quote] 这不是SQL错误,而是数据中有了字符串 13/6/2015,程序中转 DateTime 时报的错。 这属于非法数据,检查数据吧。
就是因爲程序中寫死了‘dd/MM/yyyy’的格式,所以13/6/2015才是非法數據,數據沒有錯的。 我現在是想知道怎麽讓SQL接受‘13/6/2015’是個日期。
Tiger_Zhao 2015-07-29
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 eeprom 的回复]而後臺SQL跟蹤裏,出現的語句是從(where '2015-1-6' between date_start and date_end)[/Quote]
这说明是用DateTime.ToString()按当前日期格式转换的。
[Quote=引用 12 楼 eeprom 的回复]馬上有messagebox提示‘13/6/2015日期轉換錯誤’。[/Quote]
这不是SQL错误,而是数据中有了字符串 13/6/2015,程序中转 DateTime 时报的错。
这属于非法数据,检查数据吧。
加载更多回复(1)

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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