【问题标题】:SQL Table datetime column formatSQL 表日期时间列格式
【发布时间】:2017-08-25 22:16:04
【问题描述】:

我尝试谷歌搜索以获得答案,但徒劳无功。以下是我的要求

  1. 用户可以选择将数据插入到以 export_date 作为日期时间的表中
  2. 当他们执行插入语句时,我想确保他们以“dd-MM-yyyy hh:mm:ss”格式键入日期。如果不是,则不允许运行插入查询。
  3. 或者允许用户以 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:语言设置,而不是排序规则。根据thisYYYY-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


【解决方案1】:

您可以使用设置日期格式

示例

使用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

【讨论】:

    【解决方案2】:

    如果您希望用户以“dd-MM-YYYY”格式输入日期,您可能会遇到问题,因为如果用户以 mm-dd-yyyy 格式输入,您会得到不同的结果。 “YYYMMDD”是 SQL Server 将始终正确解释的通用格式。

    从用户那里获得日期后,您可以使用所需的特定格式对其进行转换。下面将日期转换为 ISO8601 格式:

    SELECT   
        GETDATE() AS UnconvertedDateTime,   
        CONVERT(nvarchar(30), GETDATE(), 126) AS UsingConvertTo_ISO8601  ;  
    GO
    

    有关特定日期格式的更多信息,我建议您查看Microsoft's Convert Functions

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-09
      • 2011-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-29
      • 1970-01-01
      相关资源
      最近更新 更多