SQL 格式化DateTime 类型

本文介绍了一个SQL用户定义函数,用于将SQL中的日期时间按指定格式进行转换。该函数支持多种常见日期格式,并提供了一种灵活的方式来处理日期时间数据。

格式化 SQL DateTime 类型

 

代码如下:

USE [MyDemo]
GO
/****** Object:  UserDefinedFunction [dbo].[FormatDateTime]    Script Date: 08/01/2010 16:28:23 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE function [dbo].[FormatDateTime]
(
	@Date datetime,
	@formatStr varchar(20)
)
returns varchar(16)
as
begin
declare @tempstr varchar(20),@index int,@retStr varchar(20),@formatLen int,@str1 varchar(6),@str2 varchar(6),@str3 varchar(6),@j int
declare @tempformat varchar(20)
select @tempformat=@formatStr,@formatStr = Upper(@formatStr),@index=-1,@retstr=''
if @formatStr='MM/DD/YYYY'
	set @retstr= convert(varchar(10),@date,101)
else if @formatstr='YYYY-MM-DD'
	set @retstr = Convert(char(10),@Date,20)
else if @formatStr='YYYY.MM.DD'
	set @retstr= Convert(varchar(10),@Date,102)
else if @formatStr='YYYY/MM/DD'
	set @retstr= Convert(varchar(10),@Date,111)
else if @formatStr='DD/MM/YYYY'
	set @retstr= Convert(varchar(10),@Date,103)
else if @formatStr='DD.MM.YYYY'
	set @retstr= Convert(varchar(10),@Date,104)
else if @formatStr='DD-MM-YYYY'
	set @retstr= Convert(varchar(10),@Date,105)
else if @formatStr='YYYYMMDD'
	set @retstr= Convert(varchar(10),@Date,112)
else
	begin
		select @tempformat=@formatStr,@formatLen = len(@formatStr)
		if @formatLen>8
			begin
				set @index=charindex('M',@tempformat)
				select @str1=right(left(@tempformat,@index-1),@index-5),@str2=right(@tempformat,@formatLen-@index-1)
				select @index=charindex('D',@str2),@str3=@str2
				set @str2=left(@str2,@index-1)
				set @str3=right(@str3,len(@str3)-@index-1)
			end
		select @tempstr = Convert(char(10),@Date,20),@str1=isnull(@str1,''),@str2=isnull(@str2,''),@str3=isnull(@str3,''),@j=0
		while @index <> 0
		begin
			set @index = charindex('-',@tempstr)
			if @j=0
				select @retstr=left(@tempstr,@index-1)+@str1,@j=@j+1
			else 
				set @retstr=@retstr+left(@tempstr,@index-1)+@str2
			select @tempstr=right(@tempstr,len(@tempstr)-@index)
			set @index= charindex('-',@tempstr)
		end
		set @retstr=@retstr+@tempstr+@str3
end
return @retstr
end 
GO

 

代码结束。欢迎大家踊跃扩展,谢谢!

转载于:https://www.cnblogs.com/Music/archive/2010/08/02/1790777.html

### SQLDateTime 类型的操作 #### 创建带有 DateTime 字段的表 为了展示如何创建包含 `DateTime` 数据类型的表格,在 SQL Server 或 MySQL 中可以使用如下语句: ```sql CREATE TABLE ExampleTable ( ID INT PRIMARY KEY, Name VARCHAR(100), CreatedDate DATETIME -- 定义一个名为CreatedDate的列,其数据类型DATETIME ); ``` #### 插入具有 DateTime 值的数据 当向含有 `DateTime` 列的表中插入记录时,可以直接指定日期时间字符串或利用当前系统的时间戳。 对于 SQL Server: ```sql INSERT INTO ExampleTable (ID, Name, CreatedDate) VALUES (1, 'Test Entry', GETDATE()); -- 使用GETDATE()获取服务器上的当前日期和时间[^1] ``` 而对于 MySQL,则可采用 NOW(): ```sql INSERT INTO ExampleTable (ID, Name, CreatedDate) VALUES (2, 'Another Test', NOW()); ``` #### 查询特定范围内的日期 要查找某个时间段内发生的事件,可以通过比较两个 `DateTime` 表达式的大小来实现。例如查询过去一周内创建的所有条目: ```sql SELECT * FROM ExampleTable WHERE CreatedDate >= DATEADD(DAY,-7,GETDATE()) AND CreatedDate < GETDATE();-- 对于SQL Server使用DATEADD函数调整日期间隔 -- 或者在MySQL里这样做: SELECT * FROM ExampleTable WHERE CreatedDate BETWEEN DATE_SUB(NOW(), INTERVAL 7 DAY) AND NOW(); ``` #### 更新现有记录中的 DateTime 字段 如果想要更新某一行或多行的 `DateTime` 属性,只需提供新的有效值即可。比如设置所有未分配日期项目的默认时间为今天早上8点整: ```sql UPDATE ExampleTable SET CreatedDate = CAST(CAST(GETDATE() AS DATE) AS DATETIME)+CAST('08:00:00' AS TIME)-- 这是在SQL Server里的做法 -- 而在MySQL下则应这样写: UPDATE ExampleTable SET CreatedDate = CONCAT(CURDATE(),' ','08:00:00'); ``` #### 将 DateTime 格式化输出 有时需要按照一定的格式呈现给定的 `DateTime` 变量。这通常涉及到调用相应的格式化方法。以 SQL Server 和 MySQL 的不同方式为例: - **SQL Server** ```sql SELECT FORMAT(CreatedDate,'yyyy-MM-dd HH:mm:ss') As FormattedDate FROM ExampleTable;-- 使用FORMAT函数自定义输出样式 ``` - **MySQL** ```sql SELECT DATE_FORMAT(CreatedDate,'%Y-%m-%d %H:%i:%s') As FormattedDate FROM ExampleTable; ``` #### 批量修改多张表结构增加 DateTime 字段 针对多个相似命名模式下的表一次性添加相同名称的新字段,可通过动态构建 SQL 语句完成此任务。下面给出的是适用于 MySQL 的例子: ```sql SELECT CONCAT( 'ALTER TABLE ', table_name, ' ADD COLUMN create_time_date DATETIME DEFAULT NULL;' ) FROM information_schema.tables WHERE table_name LIKE 'hts_%'; ``` 上述命令会生成一系列用于更改各目标表架构的指令列表[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值