gpt4 book ai didi

sql - SQL Server 中的自定义日期/时间格式

转载 作者:行者123 更新时间:2023-12-04 11:12:41 26 4
gpt4 key购买 nike

我正在尝试编写一个存储过程,该过程从表中选择列并将 2 个额外的列添加到 ResultSet。这 2 个额外的列是表中一个字段的转换结果,该字段是一个日期时间字段。

日期时间格式字段具有以下格式 'YYYY-MM-DD HH:MM:SS.S'

应采用以下格式的 2 个附加字段:

  • DDMMM
  • HHMMT,其中 T 是上午的“A”和下午的“P”。

  • 示例:如果字段中的数据为“2008-10-12 13:19:12.0”,则提取的字段应包含:
  • 12OCT
  • 0119P

  • 我曾尝试使用 CONVERT 字符串格式,但没有一种格式与我想要的输出相匹配。我正在考虑通过 CONVERT 提取字段数据,然后使用 REPLACE,但我在这里肯定需要一些帮助,因为我不确定。

    任何精通存储过程的人都可以帮助我吗?
    谢谢!

    最佳答案

    使用 DATENAME 并将逻辑包装在函数中,而不是存储过程中

    declare @myTime as DateTime

    set @myTime = GETDATE()

    select @myTime

    select DATENAME(day, @myTime) + SUBSTRING(UPPER(DATENAME(month, @myTime)), 0,4)

    返回“14OCT”

    如果可能,在处理日期时尽量不要使用任何基于字符/字符串的操作。它们是数字(浮点数),性能会受到这些数据类型转换的影响。

    挖掘我多年来编译的这些方便的转换......
    /* Common date functions */
    --//This contains common date functions for MSSQL server

    /*Getting Parts of a DateTime*/
    --//gets the date only, 20x faster than using Convert/Cast to varchar
    --//this has been especially useful for JOINS
    SELECT (CAST(FLOOR(CAST(GETDATE() as FLOAT)) AS DateTime))

    --//gets the time only (date portion is '1900-01-01' and is considered the "0 time" of dates in MSSQL, even with the datatype min value of 01/01/1753.
    SELECT (GETDATE() - (CAST(FLOOR(CAST(GETDATE() as FLOAT)) AS DateTime)))


    /*Relative Dates*/
    --//These are all functions that will calculate a date relative to the current date and time
    /*Current Day*/
    --//now
    SELECT (GETDATE())

    --//midnight of today
    SELECT (DATEADD(ms,-4,(DATEADD(dd,DATEDIFF(dd,0,GETDATE()) + 1,0))))

    --//Current Hour
    SELECT DATEADD(hh,DATEPART(hh,GETDATE()),CAST(FLOOR(CAST(GETDATE() AS FLOAT)) as DateTime))

    --//Current Half-Hour - if its 9:36, this will show 9:30
    SELECT DATEADD(mi,((DATEDIFF(mi,(CAST(FLOOR(CAST(GETDATE() as FLOAT)) as DateTime)), GETDATE())) / 30) * 30,(CAST(FLOOR(CAST(GETDATE() as FLOAT)) as DateTime)))

    /*Yearly*/
    --//first datetime of the current year
    SELECT (DATEADD(yy,DATEDIFF(yy,0,GETDATE()),0))

    --//last datetime of the current year
    SELECT (DATEADD(ms,-4,(DATEADD(yy,DATEDIFF(yy,0,GETDATE()) + 1,0))))

    /*Monthly*/
    --//first datetime of current month
    SELECT (DATEADD(mm,DATEDIFF(mm,0,GETDATE()),0))

    --//last datetime of the current month
    SELECT (DATEADD(ms,-4,DATEADD(mm,1,DATEADD(mm,DATEDIFF(mm,0,GETDATE()),0))))

    --//first datetime of the previous month
    SELECT (DATEADD(mm,DATEDIFF(mm,0,GETDATE()) -1,0))

    --//last datetime of the previous month
    SELECT (DATEADD(ms, -4,DATEADD(mm,DATEDIFF(mm,0,GETDATE()),0)))

    /*Weekly*/
    --//previous monday at 12AM
    SELECT (DATEADD(wk,DATEDIFF(wk,0,GETDATE()) -1 ,0))

    --//previous friday at 11:59:59 PM
    SELECT (DATEADD(ms,-4,DATEADD(dd,5,DATEADD(wk,DATEDIFF(wk,0,GETDATE()) -1 ,0))))

    /*Quarterly*/
    --//first datetime of current quarter
    SELECT (DATEADD(qq,DATEDIFF(qq,0,GETDATE()),0))

    --//last datetime of current quarter
    SELECT (DATEADD(ms,-4,DATEADD(qq,DATEDIFF(qq,0,GETDATE()) + 1,0)))

    关于sql - SQL Server 中的自定义日期/时间格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/202243/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com