在函数 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 并实际返回 .【参考方案2】:

你为什么使用样式 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 转换为日期时间

如何在 SQL Server 中将字符串转换为日期时间?

在 SQL Server 中将字符串转换为日期

在 PHP Laravel 中的 SQL Server 中将字符串转换为日期数据类型

在 SQL Server 中将 varchar 转换为 datetime [重复]

sql server 中怎么把字符串转化为日期?