SQL表日期时间列格式
我试图用谷歌搜索得到答案,但没有成功。以下是我的要求SQL表日期时间列格式,sql,sql-server,database,Sql,Sql Server,Database,我试图用谷歌搜索得到答案,但没有成功。以下是我的要求 用户可以选择将数据插入到将导出日期作为日期时间的表中 当他们执行insert语句时,我想确保他们已经输入了“dd-MM-yyy-hh:MM:ss”格式的日期。如果不是,则不允许运行insert查询 或者允许用户以任何格式(如dd-MM-yyyy或dd/MM/yyyy)输入日期,但在内部将其转换为所需格式“dd-MM-yyyy hh:MM:ss”并存储 有人可以帮助/指导我吗?如果您希望用户以“dd-MM-YYYY”格式输入日期,您可能会遇到问
有人可以帮助/指导我吗?如果您希望用户以“dd-MM-YYYY”格式输入日期,您可能会遇到问题,因为如果用户以MM-dd-YYYY格式输入,您将得到不同的结果。“YYYMMDD”是SQL Server将始终正确解释的通用格式 从用户处获取日期后,可以使用所需的特定格式进行转换。以下内容将日期转换为ISO8601格式:
SELECT
GETDATE() AS UnconvertedDateTime,
CONVERT(nvarchar(30), GETDATE(), 126) AS UsingConvertTo_ISO8601 ;
GO
有关特定日期格式的更多信息,我建议您签出。如果希望用户以“dd-MM-YYYY”格式输入日期,您可能会遇到问题,因为如果用户以MM-dd-YYYY格式输入,您将得到不同的结果。“YYYMMDD”是SQL Server将始终正确解释的通用格式 从用户处获取日期后,可以使用所需的特定格式进行转换。以下内容将日期转换为ISO8601格式:
SELECT
GETDATE() AS UnconvertedDateTime,
CONVERT(nvarchar(30), GETDATE(), 126) AS UsingConvertTo_ISO8601 ;
GO
有关特定日期格式的更多信息,我建议您签出。您可以使用设置日期格式 示例 使用了
date
的数据类型进行说明,但显然可以使用datetime
Set DateFormat DMY
Select try_convert(date,'15/08/2017') -- Returns 2017-08-15
Set DateFormat MDY
Select try_convert(date,'15/08/2017') -- Returns NULL
Set DateFormat YMD
Select try_convert(date,'15/08/2017') -- Returns NULL
您可以使用设置日期格式 示例 使用了
date
的数据类型进行说明,但显然可以使用datetime
Set DateFormat DMY
Select try_convert(date,'15/08/2017') -- Returns 2017-08-15
Set DateFormat MDY
Select try_convert(date,'15/08/2017') -- Returns NULL
Set DateFormat YMD
Select try_convert(date,'15/08/2017') -- Returns NULL
事实上,无论排序规则设置如何,只有两种格式可以保证工作,它们是YYYYMMDD和YYYY-MM-DD。。。除此之外,唯一的判断方法是用户使用的MM-DD-YYYY与DD-MM-YYYY,如果日期大于12,则无法判断。@JasonA.Long:语言设置,而不是排序规则。根据,没有时间,
YYYY-MM-DD
是不安全的。@jeroenmoster,我已更正,谢谢您提供的信息。如果您在数据库之外处理数据,请在那里强制执行格式,并将键入的DATETIME
参数传递给数据库。如果您只关心人们在数据库中做什么,要么让他们自己去做,要么根本不授予他们INSERT
权限,而是要求他们调用一个存储过程,在那里您可以进行检查。即使如此,您也无法从认为格式为MM dd yyyy
的用户那里得知01-02-2000 00:00:00
是2月1日而不是1月2日。这就是为什么你一开始就不应该允许模棱两可。谢谢你,约翰和伊卡斯汀的帮助。在阅读了评论和答案之后,我决定不依赖用户来设置日期列的格式。我提出了一个小型java实用程序,可以解析excel并以我需要的格式将数据上传到表中。实际上,无论排序规则设置如何,只有两种格式可以保证工作,它们是YYYYMMDD和YYYY-MM-DD。。。除此之外,唯一的判断方法是用户使用的MM-DD-YYYY与DD-MM-YYYY,如果日期大于12,则无法判断。@JasonA.Long:语言设置,而不是排序规则。根据,没有时间,YYYY-MM-DD
是不安全的。@jeroenmoster,我已更正,谢谢您提供的信息。如果您在数据库之外处理数据,请在那里强制执行格式,并将键入的DATETIME
参数传递给数据库。如果您只关心人们在数据库中做什么,要么让他们自己去做,要么根本不授予他们INSERT
权限,而是要求他们调用一个存储过程,在那里您可以进行检查。即使如此,您也无法从认为格式为MM dd yyyy
的用户那里得知01-02-2000 00:00:00
是2月1日而不是1月2日。这就是为什么你一开始就不应该允许模棱两可。谢谢你,约翰和伊卡斯汀的帮助。在阅读了评论和答案之后,我决定不依赖用户来设置日期列的格式。我提出了一个小型java实用程序,它解析excel并以我需要的格式将数据上传到表中。