区域日期格式和数据库日期格式的不同日期格式的SQL Server错误

时间:2017-08-30 10:07:33

标签: sql-server date delphi datetime delphi-7

我的区域日期设置设为

yyyymmdd

现在,我的SQL Server默认DateTime设置为

mm/dd/yyyy

我的数据库列的数据类型为DateTime,其包含的值与数据库的格式相同。

我的代码是用Delphi7编写的。

当它从数据库中取出记录时,会触发如下所示的查询:

select * 
from EMPLOYEE 
where JOINING_DATE > '08292017'

在上述查询中,预期日期为08/29/201708-29-2017

在Delphi 7中,我使用GetLocaleChar方法从区域设置中获取分隔符的值;以下是此代码:

GetLocaleChar(DefaultLCID, LOCALE_SDATE, '/')

其中

DefaultLCID := GetThreadLocale;

另一个问题:在SQL Server中,我们使用哪个分隔符而不管数据库列中使用的分隔符是否重要?

1 个答案:

答案 0 :(得分:6)

  

我的数据库字段的数据类型为 - DateTime,它包含的值与数据库的格式相同。

SQL Server中的日期时间值采用二进制格式。日期时间值的字符串值let bgMusic = document.getElementById('bgMusic') let song = document.getElementById('song') let interval; let context = new AudioContext() let destination = context.createMediaStreamDestination() let localDest = context.createMediaStreamDestination() let source = context.createMediaElementSource(song) source.connect(destination) source.connect(localDest) let localStream = window.URL.createObjectURL(localDest.stream) bgMusic.setAttribute('src', localStream) let playButton = document.getElementById('play') let stopButton = document.getElementById('stop') playButton.addEventListener('click', () => { bgMusic.play() song.play() interval = setInterval(() => { console.log('offset', song.currentTime - bgMusic.currentTime) }, 1000) }) stopButton.addEventListener('click', () => { bgMusic.pause() song.pause() 完全由应用程序表示层控制。

  

当它从数据库中取出记录时,会触发查询   如下所示:从EMPLOYEE中选择*,其中JOINING_DATE>   '08292017'

我建议您只是参数化查询而不是传递日期文字字符串。这将避免日期格式字符串问题,并提供性能和安全性等其他好处。

如果必须将日期或日期时间文字传递给SQL Server,请使用未分离的mm/dd/yyyy格式,以便无论SQL会话YYYYMMDD设置如何都能正确解释。