Обновление записи базы данных, где используются заглавные буквы - PullRequest
1 голос
/ 06 января 2010

Я хочу знать, возможно ли это изменить:

ВХОД В БАЗУ ДАННЫХ, ГДЕ ИСПОЛЬЗУЕТСЯ КАПСЛОК. Я ХОЧУ УДАЛИТЬ ЭТУ КОРОБКИ ЗДЕСЬ.

Кому:

Запись в базе данных, где используется capslock. Я хочу снять этот колпачок здесь.

С помощью скрипта или чего-либо в рамках sql. Я скопировал базу данных в другую базу данных, но многие записи содержат поля с каждым символом в кепке. Выполнение этого вручную может занять некоторое время, так как оно содержит около 50 000 строк +.

Ответы [ 3 ]

1 голос
/ 06 января 2010

Функция, которую вы ищете, известна вам как правильный случай или случай предложения.

Вы не упомянули, какой сервер базы данных (SQL Server, Oracle, MS Access и т. Д.), Однако чаще всего это не встроенная функция.

При этом вы должны иметь возможность создавать пользовательские функции независимо от того, какую систему вы используете. Вот несколько примеров:

0 голосов
/ 06 января 2010

Функция Oracle INITCAP не будет делать то, что нужно, потому что она меняет первый символ каждого слова в строке на верхний регистр, все остальные символы в нижнем регистре. Вот функция PL / SQL для Oracle, которая в верхнем регистре первого символа предложения и в нижнем регистре остальных:

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;

Надеюсь, это поможет.

0 голосов
/ 06 января 2010
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')

С Простая пользовательская функция T-SQL в собственном регистре .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...