[MSSQL]根据日期返回星座

该博客介绍了如何在MSSQL中创建一个函数udf_GetStar,该函数接受日期参数并返回对应的星座。通过一系列的日期比较和UNION ALL操作,函数能够正确判断输入日期所属的星座,并在测试示例中展示出对于不同年份日期的正确返回结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 
go

--创建函数(优快云 fredrickhu(小F)提供)

create function udf_GetStar (@ datetime)
RETURNS varchar(100)
-- 返回日期所属星座
BEGIN
RETURN
(
select max(star)
from
(
select '魔羯座' as star,1 as [month],1 as [day]
union all select '水瓶座',1,20
union all select '双鱼座',2,19
union all select '牡羊座',3,21
union all select '金牛座',4,20
union all select '双子座',5,21
union all select '巨蟹座',6,22
union all select '狮子座',7,23
union all select '处女座',8,23
union all select '天秤座',9,23
union all select '天蝎座',10,24
union all select '射手座',11,22
union all select '魔羯座',12,22

) stars

where dateadd(month,[month] - 1,dateadd(year,year(@) - year(0),0)) + [day] - 1 =
(
select max(dateadd(month,[month] - 1,dateadd(year,year(@) - year(0),0)) + [day] - 1)
from (
select '魔羯座
### MSSQL 中拼接日期与时间并格式化 在 Microsoft SQL Server (MSSQL) 中,可以利用 `CONCAT` 函数来组合字符串表达式,包括字符、二进制和其他数据类型的换。对于日期和时间的拼接以及格式化操作,则通常会结合使用 `CONVERT` 或者 `FORMAT` 函数。 #### 使用 CONCAT 和 CONVERT 进行简单拼接 当需要将日期与其他文本信息一起展示时,可以通过 `CONCAT` 将它们连接起来,并通过 `CONVERT` 控制日期显示样式: ```sql SELECT CONCAT('今天的日期是:', ' ', CONVERT(varchar, GETDATE(), 102)) AS TodayInfo; ``` 此查询语句将会把当前系统的日期按照 ISO 格式的 YYYY.MM.DD 输出并与指定前缀文字相连[^2]。 #### 复杂场景下的日期时间和自定义格式化 如果想要更灵活地控制输出格式,特别是涉及到不同的文化设置或者是更加复杂的模式匹配需求时,推荐采用 `FORMAT` 函数代替传统的 `CONVERT` 方法来进行日期时间的格式化工作: ```sql SELECT FORMAT(GETDATE(), N'yyyy-MM-dd HH:mm:ss') AS FormattedDateTime, CONCAT('记录创建于', ': ', FORMAT(CreatedAt, N'MMMM dd, yyyy')) AS CreatedOnText FROM YourTable; ``` 这段代码不仅实现了日期时间戳的标准表示法(如 "2023-10-05 14:37:29"),还能够生成带有描述性的自然语言叙述形式(例如:"记录创建于 October 05, 2023")。 #### 结合 DATEDIFF 计算相对日期差值 有时可能还需要基于某个特定时刻相对于现在的变化情况来做进一步处理,这时就可以引入 `DATEDIFF` 来辅助完成这样的逻辑判断: ```sql WITH RecentRecords AS ( SELECT *, CASE WHEN DATEDIFF(day, EventDate, GETDATE()) = 0 THEN 'Today' WHEN DATEDIFF(day, EventDate, GETDATE()) = -1 THEN 'Yesterday' ELSE 'OtherDay' END AS TimeFrameDescription FROM EventsLog ) SELECT * FROM RecentRecords WHERE TimeFrameDescription IN ('Today', 'Yesterday'); ``` 上述例子展示了如何识别最近两天内发生的事件,并给这些记录打上相应的标签以便后续筛选[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

厦门德仔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值