使用上限的数据库条目更新

时间:2010-01-06 15:24:02

标签: sql database scripting

我想知道是否可以改变这个:

在使用CAPSLOCK的数据库中输入。我想在这里删除这个封面。

致:

使用大写锁定的数据库中的条目。我想在这里删除这个上限。

使用脚本或任何带有sql的东西。我已将数据库复制到另一个数据库,但很多记录包含大写字母的每个字符的字段。手动执行此操作可能需要一些时间,因为它包含类似50.000行+。

3 个答案:

答案 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')

来自Simple T-SQL Proper Case User-Defined Function

答案 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;

我希望这会有所帮助。