大写变成小写
Getting upper into lower case
在我的 SELECT 声明中,我有:
,用户名
当这在查询中出现时,它显示为:JOHN.SMITH
是否可以使用 CAST 或 CONVERT 将其更改为 John Smith?
非常感谢任何建议。
谢谢。
先把句点换成space:
SELECT REPLACE(SELECT UserName FROM YourTable, '.', ' ')
将其保存在变量中,或将其select直接放入下面的函数中。
不幸的是,我现在没有 t-sql,所以我无法检查语法是否 100% 正确。
然后只将第一个字符设置为大写。如果你使用的是oracle,我会告诉你使用initcap,但是t-sql.
中不存在这个
摘自link:http://www.devx.com/tips/Tip/17608
create function initcap (@text varchar(4000))
returns varchar(4000)
as
begin
declare @counter int,
@length int,
@char char(1),
@textnew varchar(4000)
set @text = rtrim(@text)
set @text = lower(@text)
set @length = len(@text)
set @counter = 1
set @text = upper(left(@text, 1) ) + right(@text, @length - 1)
while @counter <> @length --+ 1
begin
select @char = substring(@text, @counter, 1)
IF @char = space(1) or @char = '_' or @char = ',' or @char = '.' or @char = '\'
or @char = '/' or @char = '(' or @char = ')'
begin
set @textnew = left(@text, @counter) + upper(substring(@text,
@counter+1, 1)) + right(@text, (@length - @counter) - 1)
set @text = @textnew
end
set @counter = @counter + 1
end
return @text
end
所以用这个函数来转换大写字符串。希望这有帮助。
你可以这样做:
DECLARE @UserName AS varchar(50) = 'JOHN.SMITH'
SELECT LEFT(UPPER(LEFT(@UserName, CHARINDEX('.', @UserName)-1)),1) + SUBSTRING(LOWER(LEFT(@UserName, CHARINDEX('.', @UserName)-1)),2,LEN(LEFT(@UserName, CHARINDEX('.', @UserName)-1))-1) + ' ' + LEFT(UPPER(RIGHT(@UserName, LEN(@UserName) - CHARINDEX('.', @UserName))),1) + SUBSTRING(LOWER(RIGHT(@UserName, LEN(@UserName) - CHARINDEX('.', @UserName))),2,LEN(RIGHT(@UserName, LEN(@UserName) - CHARINDEX('.', @UserName)))-1)
它获取 .
之前的所有内容,然后将第一个字母调高,同时降低其余字母,然后对 .
之后的所有内容执行相同操作。
但是,如果您在代码中处理它会好得多,因为当您返回阅读此查询时您可能不知道它在做什么。
在我的 SELECT 声明中,我有:
,用户名
当这在查询中出现时,它显示为:JOHN.SMITH
是否可以使用 CAST 或 CONVERT 将其更改为 John Smith?
非常感谢任何建议。
谢谢。
先把句点换成space:
SELECT REPLACE(SELECT UserName FROM YourTable, '.', ' ')
将其保存在变量中,或将其select直接放入下面的函数中。
不幸的是,我现在没有 t-sql,所以我无法检查语法是否 100% 正确。
然后只将第一个字符设置为大写。如果你使用的是oracle,我会告诉你使用initcap,但是t-sql.
中不存在这个摘自link:http://www.devx.com/tips/Tip/17608
create function initcap (@text varchar(4000))
returns varchar(4000)
as
begin
declare @counter int,
@length int,
@char char(1),
@textnew varchar(4000)
set @text = rtrim(@text)
set @text = lower(@text)
set @length = len(@text)
set @counter = 1
set @text = upper(left(@text, 1) ) + right(@text, @length - 1)
while @counter <> @length --+ 1
begin
select @char = substring(@text, @counter, 1)
IF @char = space(1) or @char = '_' or @char = ',' or @char = '.' or @char = '\'
or @char = '/' or @char = '(' or @char = ')'
begin
set @textnew = left(@text, @counter) + upper(substring(@text,
@counter+1, 1)) + right(@text, (@length - @counter) - 1)
set @text = @textnew
end
set @counter = @counter + 1
end
return @text
end
所以用这个函数来转换大写字符串。希望这有帮助。
你可以这样做:
DECLARE @UserName AS varchar(50) = 'JOHN.SMITH'
SELECT LEFT(UPPER(LEFT(@UserName, CHARINDEX('.', @UserName)-1)),1) + SUBSTRING(LOWER(LEFT(@UserName, CHARINDEX('.', @UserName)-1)),2,LEN(LEFT(@UserName, CHARINDEX('.', @UserName)-1))-1) + ' ' + LEFT(UPPER(RIGHT(@UserName, LEN(@UserName) - CHARINDEX('.', @UserName))),1) + SUBSTRING(LOWER(RIGHT(@UserName, LEN(@UserName) - CHARINDEX('.', @UserName))),2,LEN(RIGHT(@UserName, LEN(@UserName) - CHARINDEX('.', @UserName)))-1)
它获取 .
之前的所有内容,然后将第一个字母调高,同时降低其余字母,然后对 .
之后的所有内容执行相同操作。
但是,如果您在代码中处理它会好得多,因为当您返回阅读此查询时您可能不知道它在做什么。