Ang*_*ker 0 sql sql-server sql-server-2017
我有一个 DATETIME 变量@DateEnd = '1/4/2011 16:43:22 PM'。我想得到一天的结束:1/4/2011 23:59:59.997。
我有以下内容并且工作正常,但它有很多转换并且似乎效率不高:
DECLARE @DateString VARCHAR(25)
DECLARE @DateEnd DATETIME = '1/4/2011 16:43:22 PM'
SET @DateString = CONVERT(VARCHAR(10), @DateEnd, 101) + ' 23:59:59.997'
SET @DateEnd = CAST(DateString AS DATETIME)
Run Code Online (Sandbox Code Playgroud)
有没有更有效的方法来实现这一目标?
通常,我们所做的是获取第二天开始时的 0/午夜值,然后<对范围的末端使用独占不等式边界 ( ),而不是包含等式边界 ( <=)。
DECLARE @DateEnd DATETIME = '20110104 16:43:22'
SET @DateEnd = DATEADD(day, 1, Cast(@DateEnd as Date))
Run Code Online (Sandbox Code Playgroud)
像问题中那样为 SQL 格式化日期时间文字也是不行的。不同的文化和语言对于日期的外观有自己的规范和期望,将自己的个人或文化规范强加到这些语言中是不好的。SQL 作为它自己的语言,也不例外。如果您正在编写 SQL 并且没有使用 SQL 的日期值格式(yyyyMMdd、yyyy-MM-ddTHH:mm:ss[.fff]或yyyyMMdd HH:mm:ss[.fff]),则该上下文的格式错误。
例如,我自己的首选格式是 ,yyyy-MM-dd HH:mm:ss它与那些可接受的格式不太匹配,在先学习了一些其他(过程)语言之后才开始使用 SQL。我承认多年来我经常使用这种格式;您可能可以在我在 Stack Overflow 上的回答中找到示例。但我这样做的每个地方都是错误的,我不再使用它。所以不要太难受;每个人都必须学习这一点。
| 归档时间: |
|
| 查看次数: |
66 次 |
| 最近记录: |