【发布时间】:2017-08-25 22:16:04
【问题描述】:
我尝试谷歌搜索以获得答案,但徒劳无功。以下是我的要求
- 用户可以选择将数据插入到以 export_date 作为日期时间的表中
- 当他们执行插入语句时,我想确保他们以“dd-MM-yyyy hh:mm:ss”格式键入日期。如果不是,则不允许运行插入查询。
- 或者允许用户以 dd-MM-yyyy 或 dd/MM/yyyy 等任何格式输入日期,但在内部将其转换为所需的格式“dd-MM-yyyy hh:mm:ss”并存储
有人可以帮助/指导我吗?
【问题讨论】:
-
实际上,无论排序规则设置如何,唯一能保证工作的两种格式是 YYYYMMDD 和 YYYY-MM-DD...除此之外,唯一的判断方法是用户使用了 MM-DD -YYYY vs DD-MM-YYYY 是一天是否大于12,否则没办法分辨。
-
@JasonA.Long:语言设置,而不是排序规则。根据this,
YYYY-MM-DD是不安全的。 -
@JeroenMostert,我的立场是正确的,谢谢你的信息。
-
如果您在数据库外部处理数据,请在此处强制执行格式,并将类型化的
DATETIME参数传递给数据库。如果您只关心人们在数据库中所做的事情,要么让他们自己去做,要么根本不授予他们INSERT权限,而是要求他们调用存储过程,您可以在其中执行检查。即使这样,您也不可能从认为格式为MM-dd-yyyy的用户那里得知01-02-2000 00:00:00是2 月1 日而不是1 月2 日。这就是为什么您首先不应允许歧义。 -
感谢 John 和 ikaikastine 的帮助。在阅读了 cmets 和答案后,我决定不依赖用户来格式化日期列。我想出了一个小型 java 实用程序,它可以解析 excel 并以我需要的格式将数据上传到表中。
标签: sql sql-server database