Удалите кавычки и запятые от строки в MySQL

Причины, почему селекторы на основе id не работают

  1. Элемент / DOM с указанным идентификатором еще не существует.
  2. Элемент существует, но он не является зарегистрированный в DOM [в случае, если HTML-узлы динамически добавляются из ответов Ajax].
  3. Присутствует более одного элемента с тем же идентификатором, который вызывает конфликт.

Решения

  1. Попробуйте получить доступ к элементу после его объявления или, альтернативно, использовать такие вещи, как $(document).ready();
  2. . Для элементов, исходящих из ответов Ajax, используйте метод .bind() для jQuery. В старых версиях jQuery для этого было .live().
  3. Используйте инструменты [например, плагин webdeveloper для браузеров], чтобы найти дубликаты идентификаторов и удалить их.
15
задан NeverHopeless 14 November 2012 в 15:32
поделиться

8 ответов

Вот хороший случай для регулярных выражений. Можно выполнить находку и замену на данных или перед импортом (легче) или позже если импорт SQL принял те символы (совсем не как легкие). Но в любом случае, у Вас есть любое количество методов, чтобы сделать находку и замену, быть этим редакторы, языки сценариев, программы GUI, и т.д. Помнить, что Вы собираетесь хотеть найти и заменить весь из неверных символов.

А типичное регулярное выражение для нахождения запятой и кавычек (принимающий просто двойные кавычки): (Черный список)

/[,"]/

Или, если Вы находите, что-то могло бы измениться в будущем, этом регулярном выражении, соответствия что-либо кроме числа или десятичной точки. (Белый список)

/[^0-9\.]/

то, Что было обсуждено людьми выше, - то, что мы не знаем все данные в Вашем файле CSV. Это кажется, что Вы хотите удалить запятые и кавычки от всех чисел в файле CSV. Но потому что мы не знаем то, что еще находится в файле CSV, мы хотим удостовериться, что мы не повреждаем другие данные. Просто вслепую выполнение нахождения/заменения могло влиять на другие части файла.

2
ответ дан 1 December 2019 в 04:10
поделиться

Вы могли использовать эту команду жемчуга.

Perl -lne 's/[,|"]//; print' file.txt > newfile.txt

Вы, возможно, должны играть вокруг с ним немного, но это должно добиться цели.

0
ответ дан 1 December 2019 в 04:10
поделиться

Мое предположение здесь - то, что, потому что данные смогли импортировать это, поле является на самом деле varchar или некоторым символьным полем, потому что импорт к числовому полю, возможно, перестал работать. Здесь был тестовый сценарий, я выполнил просто MySQL, решение SQL.

  1. таблица является просто отдельным столбцом (альфа), которая является varchar.

    mysql> desc t;
    
    +-------+-------------+------+-----+---------+-------+
    | Field | Type        | Null | Key | Default | Extra |
    +-------+-------------+------+-----+---------+-------+
    | alpha | varchar(15) | YES  |     | NULL    |       | 
    +-------+-------------+------+-----+---------+-------+
    
  2. Добавляют запись

    mysql> insert into t values('"1,000,000"');
    Query OK, 1 row affected (0.00 sec)
    
    mysql> select * from t;
    
    +-------------+
    | alpha       |
    +-------------+
    | "1,000,000" | 
    +-------------+
    
  3. оператор Update.

    mysql> update t set alpha = replace( replace(alpha, ',', ''), '"', '' );
    Query OK, 1 row affected (0.00 sec)
    Rows matched: 1  Changed: 1  Warnings: 0
    
    mysql> select * from t;
    
    +---------+
    | alpha   |
    +---------+
    | 1000000 | 
    +---------+
    

Так в конце оператор, который я использовал, был:

UPDATE table
   SET field_name = replace( replace(field_name, ',', ''), '"', '' );

я посмотрел MySQL Documentation , и не было похоже, что я мог сделать, регулярные выражения находят и заменяют . Хотя Вы, как Eldila, могли использовать регулярное выражение для находки и затем альтернативного решения для замены.

<час>

Также быть осторожным с s/"(\d+),(\d+)"/$1$2/, потому что, что, если число имеет больше затем просто единственную запятую, например, "1,000,000", Вы собираетесь хотеть сделать глобальную замену (в жемчуге, который является s///g). Но даже с глобальной заменой замена запускается, где Вы в последний раз кончили (если жемчуг не отличается), и отсутствовал бы, любая запятая разделила группу. Возможное решение состояло бы в том, чтобы сделать первое (\d +) дополнительным как так s/(\d+)?,(\d+)/$1$2/g, и в этом случае мне будет требоваться секунду, находят и заменяют для разделения кавычек.

Вот некоторые рубиновые примеры регулярных выражений, действующих на просто строку "1,000,000", уведомление там не удваивают кавычку в строке, это - просто строка самого числа.

>> "1,000,000".sub( /(\d+),(\d+)/, '\1\2' )
# => "1000,000"  
>> "1,000,000".gsub( /(\d+),(\d+)/, '\1\2' )
# => "1000,000"  
>> "1,000,000".gsub( /(\d+)?,(\d+)/, '\1\2' )
# => "1000000"  
>> "1,000,000".gsub( /[,"]/, '' )
# => "1000000"  
>> "1,000,000".gsub( /[^0-9]/, '' )
# => "1000000"
16
ответ дан 1 December 2019 в 04:10
поделиться

Вот путь PHP:

$stripped = str_replace(array(',', '"'), '', $value);

Ссылка на страницу

W3Schools
0
ответ дан 1 December 2019 в 04:10
поделиться

На самом деле nlucaroni, Ваш случай не совершенно правилен. Ваш пример не включает двойные кавычки, таким образом

id,age,name,...
1,23,phil,

не будет соответствовать моему regex. Это требует формата "XXX, XXX". Я не могу думать о примере того, когда он будет соответствовать неправильно.

Весь следующий пример не будет включать deliminator в regex:

"111,111",234
234,"111,111"
"111,111","111,111"

сообщите мне, можно ли думать о контрпримере.

За Ваше здоровье!

0
ответ дан 1 December 2019 в 04:10
поделиться

Решением измененного вопроса является в основном то же.

необходимо будет выполнить запрос Select с regex где пункт.

Somthing как

Select *
  FROM SOMETABLE
  WHERE SOMEFIELD REGEXP '"(\d+),(\d+)"'

Foreach этих строк, Вы хотите сделать следующую regex замену s / "(\d +), (\d +), "/$1$ 2 / и затем обновите поле с новым значением.

Joseph Pecoraro серьезно и имеют резервное копирование прежде, чем сделать массовые изменения в любых файлах или базах данных. Поскольку каждый раз, когда Вы делаете regex, можно серьезно испортить данные, если существуют случаи, которые Вы пропустили.

0
ответ дан 1 December 2019 в 04:10
поделиться

Моя команда действительно удаляет все'', и '"'.

для преобразования жала "1,000" более строго, Вам будет нужна следующая команда.

Perl -lne 's/"(\d+),(\d+)"/$1$2/; print' file.txt > newfile.txt
0
ответ дан 1 December 2019 в 04:10
поделиться

Ответ Daniel и Eldila имеет одну проблему: Они удаляют все кавычки и запятые в целом файле.

то, Что я обычно делаю, когда я должен сделать что-то вроде этого, должно сначала заменить все кавычки разделения и (обычно) точки с запятой вкладками.

  • Поиск: ";"
  • Замена: \t

, Так как я знаю, в котором столбце мои затронутые значения будут, я затем делаю другой поиск и замену:

  • Поиск: ^ ([\t] +) \t ([\t] +) \t ([0-9] +), ([0-9] +) Замена \t
  • : \1\t\2\t\3\4\t

..., учитывая значение с запятой находится в третьем столбце.

необходимо начать с "^" удостоверяться, что он запускается в начале строки. Затем Вы повторяетесь ([0-9] +) \t так же часто, как существуют столбцы, которые Вы просто хотите оставить как они

([0-9] +), ([0-9] +) ищет значения, где существует число, затем запятая и затем другое число.

В строке замены мы используем \1 и \2, чтобы просто сохранить значения от отредактированной строки, разделяя их с \t (вкладка). Затем мы помещаем \3\4 (никакая вкладка между) для помещения двух компонентов числа без запятой прямо друг после друга. Все значения после того, как это будет оставлено в покое.

при необходимости в файле, чтобы иметь точку с запятой для разделения элементов, затем можно пойти и заменить вкладки точками с запятой. Однако затем - если Вы не учитываете кавычки - необходимо будет удостовериться, что текстовые значения не содержат точек с запятой самих. Вот почему я предпочитаю использовать ВКЛАДКУ в качестве разделителя столбцов.

я обычно делаю это в обычном текстовом редакторе (EditPlus), который поддерживает RegExp, но тот же regexps может использоваться на любом языке программирования.

-1
ответ дан 1 December 2019 в 04:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: