我想知道是否可以改变这个:
在使用CAPSLOCK的数据库中输入。我想在这里删除这个封面。
致:
使用大写锁定的数据库中的条目。我想在这里删除这个上限。
使用脚本或任何带有sql的东西。我已将数据库复制到另一个数据库,但很多记录包含大写字母的每个字符的字段。手动执行此操作可能需要一些时间,因为它包含类似50.000行+。
答案 0 :(得分:1)
您正在寻找的功能被称为正确的案例或句子案例。
您没有提到哪个数据库服务器(SQL Server,Oracle,MS Access等),但它是一个最常用的功能。
也就是说,无论您使用哪种系统,都应该能够创建自定义功能。以下是一些例子:
答案 1 :(得分:0)
create function ProperCase(@Text as varchar(8000))
returns varchar(8000)
as
begin
declare @Reset bit;
declare @Ret varchar(8000);
declare @i int;
declare @c char(1);
select @Reset = 1, @i=1, @Ret = '';
while (@i <= len(@Text))
select @c= substring(@Text,@i,1),
@Ret = @Ret + case when @Reset=1 then UPPER(@c) else LOWER(@c) end,
@Reset = case when @c like '[a-zA-Z]' then 0 else 1 end,
@i = @i +1
return @Ret
end
select dbo.ProperCase('this,my friends, is a test.wHat DO you think?i like shaquile o''neal')
答案 2 :(得分:0)
Oracle的INITCAP函数不会执行此处所需的操作,因为它将字符串中每个字的第一个字符更改为大写,所有其他字符都是小写的。这是Oracle的PL / SQL函数,它可以提升句子的第一个字符并降低其余部分:
CREATE OR REPLACE FUNCTION UPCASE_SENTENCES(strText IN VARCHAR2) RETURN VARCHAR2 IS
strResult VARCHAR2(32767);
bUpcase_next BOOLEAN := TRUE;
i NUMBER;
thisC VARCHAR2(1);
FUNCTION isWhitespace(strC IN VARCHAR2) RETURN BOOLEAN IS
BEGIN
IF ASCII(strC) < 33 OR ASCII(strC) > 126 THEN
RETURN TRUE;
ELSE
RETURN FALSE;
END IF;
END isWhitespace;
BEGIN
FOR i IN 1..LENGTH(strText) LOOP
thisC := SUBSTR(strText, i, 1);
IF bUpcase_next AND NOT isWhitespace(thisC) THEN
strResult := strResult || UPPER(thisC);
bUpcase_next := FALSE;
ELSE
strResult := strResult || LOWER(thisC);
IF thisC IN ('.', '?', '!') THEN
bUpcase_next := TRUE;
END IF;
END IF;
END LOOP;
RETURN strResult;
END UPCASE_SENTENCES;
我希望这会有所帮助。