代码之家  ›  专栏  ›  技术社区  ›  Younes

使用caps的数据库条目更新

  •  1
  • Younes  · 技术社区  · 15 年前

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

    数据库中使用capslock的条目。我想把这个帽子取下来。

    到:

    数据库中使用capslock的条目。我想把这个帽子取下来。

    使用脚本或任何带有SQL的内容。我已经将一个数据库复制到另一个数据库中,但是许多记录包含capslock中每个字符的字段。手工操作可能需要一些时间,因为它包含50000行以上。

    3 回复  |  直到 15 年前
        1
  •  0
  •   Mitch Wheat    15 年前
    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
  •  1
  •   John    15 年前

    您要查找的功能称为“您是正确的大小写”或“句子大小写”。

    您没有提到哪个数据库服务器(SQL Server、Oracle、MS Access等),但它通常不是内置的功能。

    也就是说,无论您使用的是哪个系统,都应该能够创建自定义函数。以下是一些例子:

        3
  •  0
  •   Bob Jarvis - Слава Україні    15 年前

    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;
    

    我希望这有帮助。