使用函数中的字符串时,parsename 不起作用
parsename is not working when using string from function
Parsename 在直接使用字符串或从函数返回静态值时有效。但是当我从函数返回带点的 select 值时。它不工作。我无法弄清楚这个问题。
CREATE TABLE [dbo].[TestTimeLine](
[UserID] [int] NOT NULL,
[Field1] [nchar](250) NOT NULL,
[Value] [smalldatetime] NULL,
[Timestamp] [datetime] NULL,
)
INSERT INTO [TestTimeLine] VALUES(10,'TestDate',GETDATE(),GETDATE())
CREATE FUNCTION TestFunction()
RETURNS NVARCHAR(MAX)
AS
BEGIN
DECLARE @R NVARCHAR(MAX)
SELECT TOP 1 @R=CAST(DATENAME(month,value) AS VARCHAR) + ' ' + CAST(YEAR(value) AS VARCHAR) + '.' +CONVERT(varchar,value,101) + '. ' + LTRIM(Field1)
FROM [TestTimeLine]
WHERE UserId = 10
RETURN @R
END
select dbo.TestFunction()
select PARSENAME(dbo.TestFunction(),2)
工作
select PARSENAME('January 2015.01/05/2015. TestDate',2)
不工作 -- Returns NULL
select PARSENAME(dbo.TestFunction(),2)
尝试将参数 2 更改为 1。
select PARSENAME(dbo.TestFunction(),1)
更多详情请参考:
More Details
问题是 dbo.TestFunction()
的 return 值是不正确的标识符 - 它超过了 SQL 服务器中对象标识符的最大长度限制。您的示例 return 值有很多尾随空格,导致出现这种情况。
一般来说,将 PARSENAME
用于您的目的不是一个好主意,因为您使用该函数不是为了它的初始目的,所以您会产生所有副作用,而这些副作用是一个 SQL 服务器版本到另一个。在你的情况下使用普通的字符串函数。
我收到了问题。
问题是 [nchar]
数据类型。
更改为 'Varchar' 数据类型后。它工作正常。
Parsename 在直接使用字符串或从函数返回静态值时有效。但是当我从函数返回带点的 select 值时。它不工作。我无法弄清楚这个问题。
CREATE TABLE [dbo].[TestTimeLine](
[UserID] [int] NOT NULL,
[Field1] [nchar](250) NOT NULL,
[Value] [smalldatetime] NULL,
[Timestamp] [datetime] NULL,
)
INSERT INTO [TestTimeLine] VALUES(10,'TestDate',GETDATE(),GETDATE())
CREATE FUNCTION TestFunction()
RETURNS NVARCHAR(MAX)
AS
BEGIN
DECLARE @R NVARCHAR(MAX)
SELECT TOP 1 @R=CAST(DATENAME(month,value) AS VARCHAR) + ' ' + CAST(YEAR(value) AS VARCHAR) + '.' +CONVERT(varchar,value,101) + '. ' + LTRIM(Field1)
FROM [TestTimeLine]
WHERE UserId = 10
RETURN @R
END
select dbo.TestFunction()
select PARSENAME(dbo.TestFunction(),2)
工作
select PARSENAME('January 2015.01/05/2015. TestDate',2)
不工作 -- Returns NULL
select PARSENAME(dbo.TestFunction(),2)
尝试将参数 2 更改为 1。
select PARSENAME(dbo.TestFunction(),1)
更多详情请参考: More Details
问题是 dbo.TestFunction()
的 return 值是不正确的标识符 - 它超过了 SQL 服务器中对象标识符的最大长度限制。您的示例 return 值有很多尾随空格,导致出现这种情况。
一般来说,将 PARSENAME
用于您的目的不是一个好主意,因为您使用该函数不是为了它的初始目的,所以您会产生所有副作用,而这些副作用是一个 SQL 服务器版本到另一个。在你的情况下使用普通的字符串函数。
我收到了问题。
问题是 [nchar]
数据类型。
更改为 'Varchar' 数据类型后。它工作正常。