在 SQL Server 函数中将字符串转换为日期时间

发布于 2024-12-03 17:02:51 字数 473 浏览 0 评论 0原文

我一直在 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 时转换失败。

我做错了什么?

I have been writing a user-defined function in SQL Server:

It looks like this :

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')

When I try to run this, I get the following error:

Conversion failed when converting the nvarchar value '08/17/2010 4:30' to data type int.

What am I doing wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

遇到 2024-12-10 17:02:51

您在转换中指定的 100 用于在选择数据时进行格式化,而不是用于格式化数据存储。

日期时间只是存储为日期时间 - 就是这样(我的意思是,根据您的 SQL 设置,它可能是 MM/DD/YYYY 或 DD/MM/YYYY)。

但如果你这样做:

set @tempfrom =  Convert(datetime, @fromtime)

它现在是一个日期时间,你可以通过将其包装在另一个转换中将其转换为你想要的格式:

convert(varchar, convert(datetime, @fromtime), 100)

The 100 you're specifying in the convert is used to format when you're selecting data, not to format the storage of data.

Datetime is just stored as datetime - that's it (i mean, dependent on your SQL settings, it might be MM/DD/YYYY or DD/MM/YYYY).

But if you just do this:

set @tempfrom =  Convert(datetime, @fromtime)

it's now a datetime, which you can convert to your desired formatting by wrapping it in another convert:

convert(varchar, convert(datetime, @fromtime), 100)
℉絮湮 2024-12-10 17:02:51

为什么使用样式 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

Why are you using style 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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文