Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tsql 将T-SQL函数转换为camelCase a值_Tsql - Fatal编程技术网

Tsql 将T-SQL函数转换为camelCase a值

Tsql 将T-SQL函数转换为camelCase a值,tsql,Tsql,我正在编写一个实用程序脚本,它将从数据库表中获取一列并生成一段javascript代码。我想要的是返回一个像“First_Name”这样的值,并将其大小写转换为“firstName”。在SQL中有没有一种简单的方法可以做到这一点?我正在使用T-SQL。这个怎么样: CREATE FUNCTION [dbo].[udfCamel] ( @Name VARCHAR(50) ) RETURNS varchar(50) AS BEGIN declare @newstring varc

我正在编写一个实用程序脚本,它将从数据库表中获取一列并生成一段javascript代码。我想要的是返回一个像“First_Name”这样的值,并将其大小写转换为“firstName”。在SQL中有没有一种简单的方法可以做到这一点?我正在使用T-SQL。

这个怎么样:

CREATE FUNCTION [dbo].[udfCamel]
(
    @Name   VARCHAR(50)
)
RETURNS varchar(50)
AS
BEGIN
    declare @newstring varchar(50)

    set @newstring = stuff(replace(@Name, '_', ''), 1, 1, lower(left(@Name, 1)))

    RETURN @newstring
END
然后,当您执行它时:

declare @str varchar(50)
set @str = 'First_Name'
select dbo.udfCamel(@str)

返回:
firstName

您可以使用标量函数返回camel大小写。这也将处理小写的场景。以下是一个可能适用于您的示例:

DECLARE @MyText VARCHAR(MAX)

SET @MyText = 'Convert_This_to_Camel_Case'
WHILE(CHARINDEX('_',@MyText) > 0)
BEGIN
    SET @MyText = REPLACE(@MyText,'_' +SUBSTRING(@MyText,(CHARINDEX('_',@MyText) + 1),1), UPPER(SUBSTRING(@MyText,(CHARINDEX('_',@MyText) + 1),1)))
END
    SELECT LOWER(SUBSTRING(@MyText,1,1))+ SUBSTRING(@MyText, 2, LEN(@MyText) -1)
要转换为“camelCase”(非camelCase),这应该可以:

ALTER函数dbo.camelCase(
@输入VARCHAR(8000)
)
返回VARCHAR(8000)
作为
开始
设置@input=LTRIM(RTRIM(@input))
声明
@i INT=0
,@len INT=len(@input)
,@高位=0
,@output varchar(8000)=”
,@char-NCHAR
,@ascii INT
当@i<@len开始时
挑选
@i=@i+1
,@char=SUBSTRING(@input,@i,1)
,@ascii=ascii(@char)

如果不是((@ascii>=65和@ascii=97和@ascii=48和@ascii我只是碰巧完成了类似的工作,并且仍然有SQL,所以我想我应该在这个线程上测试所选的答案,但我没有得到我想要的结果,所以我想我应该提供另一个选项

//dbo.udfCamel is script above set as answer
//dbo.CamelCase is script being added below 
SELECT dbo.CamelCase('microSoft sql server'), dbo.udfCamel('microSoft sql server')

//results:
//   dbo_CamelCase           dbo_udfCamel
//   microsoftSqlServer      microSoft sql server

CREATE FUNCTION [dbo].[CamelCase]
   (@Str varchar(8000))
   RETURNS varchar(8000) AS
   BEGIN
     DECLARE @Result varchar(2000)
     SET @Str = LOWER(@Str) + ' '
     SET @Result = ''
     WHILE 1=1
        BEGIN
        IF PATINDEX('% %',@Str) = 0 BREAK
        SET @Result = @Result + UPPER(Left(@Str,1))+ SubString  (@Str,2,CharIndex(' ',@Str)-1)
        SET @Str = SubString(@Str, CharIndex(' ',@Str)+1,Len(@Str))
    END
    SET @Result = Left(@Result,Len(@Result))
    SET @Result = REPLACE(@Result, ' ', '')
    SET @Result = LOWER(SUBSTRING(@Result, 1, 1)) + SUBSTRING(@Result, 2, LEN(@Result)-1)

    RETURN @Result
    END 

@MikaelEriksson是的,我没有测试那一个。我测试了First\u Name\u test等。我不会编辑我的,因为它会是你答案的副本。@MikaelEriksson谢谢你的编辑。我没有想过在名字中重复相同的字符。我总是忘记
Stuff()