在函数 SQL Server 中将字符串转换为日期时间
Posted
技术标签:
【中文标题】在函数 SQL Server 中将字符串转换为日期时间【英文标题】:convert string to datetime in function SQL Server 【发布时间】:2011-09-09 18:54:24 【问题描述】:我一直在 SQL Server 中编写用户定义函数:
看起来像这样:
CREATE FUNCTION FormatDate(@fromtime nvarchar(50))
RETURNS DATETIME
AS
BEGIN
DECLARE @tempfrom datetime
DECLARE @tempto nvarchar(50)
set @tempfrom = Convert(datetime, @fromtime, 100)
RETURN @tempfrom
END
select dbo.FormatDate('08/17/2010 4:30')
当我尝试运行它时,我收到以下错误:
将 nvarchar 值 '08/17/2010 4:30' 转换为数据类型 int 时转换失败。
我做错了什么?
【问题讨论】:
为什么选择 nvarchar?您是否要在日期字符串中使用变音符号和日元符号? @NullUserException tee hee 别说了,你让我想偷懒去看看韭菜 嘿,我可以为你打开团队查看器并显示它.. 它是 100% CODE.... 是的,但是您遇到的错误来自您未显示的代码。这让我们很难知道发生了什么,因为我们无法访问任何“团队查看器”...... 我想通了。感谢 Aaron 抽出宝贵时间,但这是我函数中唯一的代码,我已将代码完全放在这里.....我不知道为什么它给出了错误,但你的评论仍然对删除函数有帮助.. ... 【参考方案1】:您在转换中指定的 100 用于在您选择数据时格式化,而不是格式化数据的存储。
日期时间只是存储为日期时间 - 就是这样(我的意思是,取决于您的 SQL 设置,它可能是 MM/DD/YYYY 或 DD/MM/YYYY)。
但如果你这样做:
set @tempfrom = Convert(datetime, @fromtime)
现在是日期时间,您可以通过将其包装在另一个转换器中来将其转换为所需的格式:
convert(varchar, convert(datetime, @fromtime), 100)
【讨论】:
因为那是输出一个格式化的字符串。您需要选择是要输出格式化字符串还是日期时间。然后函数需要说 RETURNS你为什么使用样式 100?
CREATE FUNCTION dbo.FormatDate -- schema prefix always!
(
@fromtime VARCHAR(50) -- varchar
)
RETURNS DATETIME
AS
BEGIN -- don't need variables anywhere
RETURN(CONVERT(DATETIME, @fromtime));
END
GO
【讨论】:
我以后需要这些东西。这就是我使用这些变量的原因 以后去哪里?在函数中? 那么为什么不把整个函数贴出来,让我们知道整个问题呢? @user838359:那么你做错了什么,因为这段代码对我来说很好。 那你为什么不从头开始,例如暂时放弃功能混乱并尝试SELECT CONVERT(DATETIME, '08/17/2010 4:30');
- 有效吗?接下来试着弄清楚为什么你使用m/d/y
而不是像yyyy-mm-ddThh:mm:ss
这样的安全格式......你永远不应该将日期作为字符串处理,如果必须,你应该总是用一种语言来处理它们 - 并且区域设置独立方式。以上是关于在函数 SQL Server 中将字符串转换为日期时间的主要内容,如果未能解决你的问题,请参考以下文章
在 C# 中将十六进制值从 SQL Server 转换为日期时间
在 PHP Laravel 中的 SQL Server 中将字符串转换为日期数据类型