SQL Server 扩展一个支持类似。net 时间格式化的标量函数~

IF EXISTS(SELECT TOP 1 * FROM sys.objects WHERE name=N‘uF_DateFormat‘ AND [type]=‘FN‘)
    DROP FUNCTION uF_DateFormat
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:        hehai
-- Create date: 2015-11-27 16:06:43
-- Description:    对指定的时间进行指定格式的转换

/*
    @formatString
    年 份:yy / yyyy (15/2015)
    月 份: mm/MM     (1/01 11/11)
    日 期:d/dd/D/DD (1/01 10/10)
    小 时:h/hh/H/HH (6AM/06AM/6/06)        h表示按照12时制格式化, H表示按照24时制格式化,若为h/hh时间最后有[AM 或 PM]
                     (6PM/06PM/18/18)
    -------------------------------------------
    分 钟:mi/mz     (10/10 1/01)
    秒 钟:si/ss     (1/01 10/10)
    秒 钟:mss/ms     (0/10/999  000/010/999)
*/
-- =============================================
CREATE FUNCTION uF_DateFormat
(
    @date DATETIME,                            -- 指定转换时间
    @formatString NVARCHAR(30),                -- 指定需要转换格式
    @defaultIfdateIsNull NVARCHAR(30)        -- 返回指定时间的指定转换格式结果字符
)
RETURNS NVARCHAR(30)
AS
BEGIN
    DECLARE @R NVARCHAR(30),@T NVARCHAR(5),@C CHAR(2)=N‘AM‘
    DECLARE @Y INT,@M TINYINT,@D TINYINT,@H TINYINT,@MI TINYINT,@SS TINYINT,@MS INT

    SET @Y=DATEPART([YEAR],@date)
    SET @M=DATEPART([MONTH],@date)
    SET @D=DATEPART([DAY],@date)
    SET @H=DATEPART([HOUR],@date)
    SET @MI=DATEPART([MINUTE],@date)
    SET @SS=DATEPART([SECOND],@date)
    SET @MS=DATEPART([MILLISECOND],@date)

    SET @R=@formatString

    SET @R=REPLACE(@R,N‘yyyy‘,CAST(@Y AS NVARCHAR(4)))
    SET @R=REPLACE(@R,N‘YYYY‘,CAST(@Y AS NVARCHAR(4)))
    SET @R=REPLACE(@R,N‘yy‘,RIGHT( CAST(@Y AS NVARCHAR(4)),2))
    SET @R=REPLACE(@R,N‘YY‘,RIGHT( CAST(@Y AS NVARCHAR(4)),2))

    SET @T=CAST(@M AS NVARCHAR(2))
    IF @M<10 SET @T=N‘0‘+CAST(@M AS NVARCHAR(2))
    SET @R=REPLACE(@R,N‘MM‘,@T)
    SET @R=REPLACE(@R,N‘mm‘,@T)

    SET @T=CAST(@D AS NVARCHAR(2))
    IF @D<10 SET @T=N‘0‘+CAST(@D AS NVARCHAR(2))
    SET @R=REPLACE(@R,N‘dd‘,@T)
    SET @R=REPLACE(@R,N‘DD‘,@T)
    SET @R=REPLACE(@R,N‘dd‘,@T)
    SET @R=REPLACE(@R,N‘d‘,@T)

    SET @T=CAST(@H AS NVARCHAR(2))
    IF @H<10 SET @T=N‘0‘+CAST(@H AS NVARCHAR(2))
    SET @R=REPLACE(@R,N‘HH‘,@T)
    SET @R=REPLACE(@R,N‘H‘,@T)

    -- 12小时制 --
    SET @T=CAST(@H AS NVARCHAR(2))
    IF @H>=12
    BEGIN
        SET @C=‘PM‘
        SET @H=24-12
        SET @T=CAST(@H AS NVARCHAR(2))
    END
    SET @R=REPLACE(@R,N‘hh‘,@T)
    SET @R=REPLACE(@R,N‘h‘,@T)

    SET @T=CAST(@MI AS NVARCHAR(2))
    IF @MI<10 SET @T=N‘0‘+CAST(@MI AS NVARCHAR(2))
    SET @R=REPLACE(@R,N‘mi‘,@T)

    SET @T=CAST(@SS AS NVARCHAR(2))
    IF @SS<10 SET @T=N‘0‘+CAST(@SS AS NVARCHAR(2))
    SET @R=REPLACE(@R,N‘ss‘,@T)
    SET @R=REPLACE(@R,N‘si‘,@T)

    SET @T=CAST(@MS AS NVARCHAR(3))
    IF @MS>=0 AND @MS<10 SET @T=N‘00‘+CAST(@MS AS NVARCHAR(1))
    IF @MS>=10 AND @MS<100 SET @T=N‘0‘+CAST(@MS AS NVARCHAR(2))
    SET @R=REPLACE(@R,N‘ms‘,@T)
    SET @R=REPLACE(@R,N‘mss‘,@T)

    RETURN @R
END
GO

-- 年月日
SELECT dbo.uF_DateFormat(getdate(),‘yyyyMMdd‘,NULL)
SELECT dbo.uF_DateFormat(getdate(),‘yyyy/MM/dd‘,NULL)
SELECT dbo.uF_DateFormat(getdate(),‘yyyy-MM-dd‘,NULL)
SELECT dbo.uF_DateFormat(getdate(),‘yyyy年MM月dd日‘,NULL)

-- 年月日时分秒
SELECT dbo.uF_DateFormat(getdate(),‘yyyyMMdd HH:mi:ss‘,NULL)

-- 年月日时分秒 毫秒
SELECT dbo.uF_DateFormat(getdate(),‘yyyy-MM-dd HH:mi:ss.ms‘,NULL)
时间: 2024-10-25 11:00:32

SQL Server 扩展一个支持类似。net 时间格式化的标量函数~的相关文章

Sql Server 中一个非常强大的日期格式化函数

Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM Select CONVERT(varchar(100), GETDATE(), 1): 05/16/06 Select CONVERT(varchar(100), GETDATE(), 2): 06.05.16 Select CONVERT(varchar(100), GETDATE(), 3): 16/05/06 Select CONVERT(varchar(100),

SQL Server 扩展事件(Extented Events)从入门到进阶(4)——扩展事件引擎——基本概念

本文属于 SQL Server 扩展事件(Extented Events)从入门到进阶 系列 在第一二节中,我们创建了一些简单的.类似典型SQL Trace的扩展事件会话.在此过程中,介绍了很多扩展事件基础组件,包括事件.谓词.操作和目标.本节,将对扩展事件引擎.架构和基本组件做更加深入的了解.通过这些讲解,可以大概了解到为什么扩展事件相对于SQL Trace来说更加低开销.另外,还会延时如何设计事件会话从而最小化事件收集过程中的不必要开销,即使这些事件会话会很复杂. 事件数据收集生命周期: 扩

SQL Server 扩展事件

SQL Server 扩展事件(Extended Event)是用于服务器的常规事件处理系统,是追踪SQL Server系统运行状态的神器,同时也是一个日志记录工具,扩展事件完全可以取代SQL追踪(SQL Trace),扩展事件的设计功能: 由于扩展事件引擎不识别事件,因此,引擎可以将任何事件绑定到任何目标,因为引擎不受事件内容约束. 事件与事件使用者不同,后者在扩展事件中称为“目标”(Target),也就是说任何目标可以接收任何事件.此外,引发的任何事件均可供目标自动使用,这样可以记录或提供额

SQL Server扩展事件(Extended Events)-- 使用扩展事件跟踪监控死锁

SQL Server扩展事件(Extended Events)-- 使用扩展事件跟踪监控死锁 我们通过SQL Server 2012图形界面来部署一个扩展事件跟踪会话.然后可以生成SQL脚本,在2008或2008 R2版本下运行类似的跟踪. 步骤1: 通过"Object Explorer"连接到实例,展开"Management"."Extended Events"."Sessions". 步骤2: 右键点击"Sess

SQL Server扩展事件(Extended Events)-- 使用扩展事件跟踪查询语句

SQL Server扩展事件(Extended Events)-- 使用扩展事件跟踪查询语句 创建扩展事件会话 展开"Object Explorer"."Management"."Extended Events"."Sessions"目录,你会发现一到两个预设的会话.默认,在SQL Server 2012包含system_health会话,而根据不同的SQL Server2012的版本,可能有AlwaysOn_health会话

SQL Server扩展事件(Extended Events)-- 扩展事件概念解析

SQL Server扩展事件(Extended Events)-- 扩展事件概念解析 下图描述了扩展事件中引入的几个新概念: 事件 事件是指代码中定义的点.此类示例包括:T-SQL 语句完成执行时的点或结束获取锁定时的点.每个事件都有一个定义的负载(该事件返回的列的集合),它是使用 ETW 模型(其中每个事件都返回一个通道和关键字作为负载的一部分)来定义的,以便能够与 ETW 集成.SQL Server 2008 最初提供 254 个定义的事件,预计在今后还会增加. 使用下列代码可以查看这些定义

SQL Server扩展事件(Extended Events)&mdash;使用system_health扩展事件会话

SQL Server扩展事件(Extended Events)-使用system_health扩展事件会话 system_health 会话是 SQL Server 默认包含的扩展事件会话. 该会话在 SQL Server 数据库引擎启动时自动启动,并且运行时不会对性能造成任何明显影响. 该会话收集的系统数据可用于帮助对数据库引擎的性能问题进行故障排除. 因此,我们建议您不要停止或删除该会话. 此会话源自产品支持团队的想法,它可以跟踪通常被用来对客户系统进行调试的信息(例如当客户系统发生死锁或出

SQL Server 2012:SQL Server体系结构——一个查询的生命周期(第1部分)

为了缩小读取操作所涉及范围,本文首先着眼于简单的SELECT查询,然后引入执行更新操作有关的附加过程.最后你会读到,优化性能时SQLServer使用还原工具的相关术语和流程. 关系和存储引擎 如图所示,SQL Server被分为2个主要引擎:关系引擎和存储引擎.关系引擎有时也被称为查询处理器,因为它的主要功能是查询优化和执行.它包含检查查询语法和准备查询树的命令解析器:查询优化器毫无疑问是任何数据库系统中皇冠上的宝石:查询执行器对执行(查询计划)负责. 存储引擎对所有数据输入.输出管理负责.它包

SQL Server中一个隐性的IO性能杀手-Forwarded record

原文:SQL Server中一个隐性的IO性能杀手-Forwarded record 简介     最近在一个客户那里注意到一个计数器很高(Forwarded Records/Sec),伴随着间歇性的磁盘等待队列的波动.本篇文章分享什么是forwarded record,并从原理上谈一谈为什么Forwarded record会造成额外的IO.   存放原理     在SQL Server中,当数据是以堆的形式存放时,数据是无序的,所有非聚集索引的指针存放指向物理地址的RID.当数据行中的变长列增