【问题标题】:how to convert selected text into Capital letters如何将所选文本转换为大写字母
【发布时间】:2013-11-02 17:20:55
【问题描述】:

我有字符串,我需要将它们转换为所需字符串中的大写文本

我已经使用 Charindex 编写了查询来执行此操作,它只找到一个如何去第二个我只通过索引找到第二个单词如何找到其他单词

select UPPER(LEFT(SUBSTRING('AHRQ utilization flag',CHARINDEX(' ','AHRQ utilization flag',0)+1,
len('AHRQ utilization flag')),1)) 

例如,样本输入:

    have a great day 

我想要的输出:

    Have A Great Day

如何做到这一点.......建议我

【问题讨论】:

  • 您使用的是什么版本的 SQL Server?
  • @MikaelEriksson 我在这里发布了答案。在其他问题或这个问题上发帖是标准程序吗?
  • @t-clausen.dk 我不知道。即使这个 Q 被关闭为骗子,它仍然会在搜索中找到。 my most up voted answers 之一是封闭的 Q。

标签: sql-server tsql


【解决方案1】:
CREATE FUNCTION udf_vijay (@InputString VARCHAR(1000) )
RETURNS VARCHAR(1000)
AS
BEGIN
DECLARE @Index INT
DECLARE @Char CHAR(1)
DECLARE @OutputString VARCHAR(255)
SET @OutputString = LOWER(@InputString)
SET @Index = 2
SET @OutputString =
STUFF(@OutputString, 1, 1,UPPER(SUBSTRING(@InputString,1,1)))
WHILE @Index <= LEN(@InputString)
BEGIN
SET @Char = SUBSTRING(@InputString, @Index, 1)
IF @Char IN (' ', ';', ':', '!')
IF @Index + 1 <= LEN(@InputString)
BEGIN
IF @Char != ''''
OR
UPPER(SUBSTRING(@InputString, @Index + 1, 1)) != 'S'
SET @OutputString =
STUFF(@OutputString, @Index + 1, 1,UPPER(SUBSTRING(@InputString, @Index + 1, 1)))
END
SET @Index = @Index + 1
END
RETURN ISNULL(@OutputString,'')
END

【讨论】:

  • vijay kumar 使用后会是 Vijay Kumar 吗?
  • 我有这个功能,但我正在通过 queryselect UPPER(LEFT(SUBSTRING('AHRQ 利用率标志',CHARINDEX('','AHRQ 利用率标志',0)+1, len ('AHRQ 使用标志')),1))
  • “AHRQ 使用标志”在此如何制作大写“U”和大写“F”
  • 在 sql server 中?版本?
  • 是的,我使用了大写字母和 Charindex,我正在为第一个案例 'U' 如何制作标志
【解决方案2】:

一种方法可能是:

将字符串拆分为第一个字符 UPPER,其余部分如下:

UPPER(LEFT(string)) + RIGHT(string, LEN(string) - 1)

然后将后面的任何空格替换为大写字母,例如:

REPLACE(string, ' a', ' A')

结合以上,你可以这样做:

SELECT 
    UPPER(LEFT('have a great day')) + 
    REPLACE((((((((((((((((((((((((((
        RIGHT('have a great day', LEN('have a great day') - 1)
    , ' a', ' A'), ' b', ' B'), ' c', ' C')
    , ' d', ' D'), ' e', ' E'), ' f', ' F')
    , ' g', ' G'), ' h', ' H'), ' i', ' I')
    , ' j', ' J'), ' k', ' K'), ' l', ' L')
    , ' m', ' M'), ' n', ' N'), ' o', ' O')
    , ' p', ' P'), ' q', ' Q'), ' r', ' R')
    , ' s', ' S'), ' t', ' T'), ' u', ' U')
    , ' v', ' V'), ' w', ' W'), ' x', ' X')
    , ' y', ' Y'), ' z', ' Z')

可能需要一些调整,因为我还没有实际测试过它

【讨论】:

  • 你能让它动态吗?
【解决方案3】:

您可以编写一个函数来转换骆驼大小写的所需字符串,如下所示:

CREATE FUNCTION [dbo].[fn_CamelCase]
(@Str varchar(8000))
RETURNS varchar(8000) AS
BEGIN
  DECLARE @Result varchar(8000)
  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))
  RETURN @Result
END  
Go

然后调用相同的:

select 'AHRQ ' + dbo.fn_CamelCase ('utilization flag')

SQL Fiddle Demo 与 MS SQL Server

【讨论】:

  • +1,效果很好,我已经添加了演示链接,@mohan111 去这个解决方案
【解决方案4】:
create function f_CamelCase
(
  @txt nvarchar(max)
) returns nvarchar(max)
as 
begin 
set @txt = stuff(lower(@txt), 1,1,upper(left(@txt, 1)))

declare @index int = 1
while @index > 0
begin

  set @index = patindex('%[ ][abcdefghijklmnopqrstuvxyz]%', @txt  
            COLLATE SQL_Latin1_General_CP1_CS_AS)

  select @txt = stuff(@txt, @index+ 1, 1, upper(substring(@txt, @index + 1, 1)))
  where @index > 0

end

return @txt
end

测试:

select dbo.f_CamelCase('aa b A b c')

结果:

Aa B A B C   

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-07
    • 2015-07-28
    • 1970-01-01
    • 2011-06-01
    相关资源
    最近更新 更多