Importuję dane z tabeli, która ma surowe kanały w Varchar, muszę zaimportować kolumnę w varchar do kolumny ciągów. Próbowałem użyć, <column_name>::integer
jak również, to_number(<column_name>,'9999999')
ale otrzymuję błędy, ponieważ jest kilka pustych pól, muszę je pobrać jako puste lub zerowe do nowej tabeli.
Uprzejmie daj mi znać, jeśli istnieje funkcja dla tego samego.
postgresql
casting
Vijay DJ
źródło
źródło
Odpowiedzi:
Dzikie przypuszczenie: jeśli wartość jest pustym ciągiem, możesz użyć NULLIF, aby zastąpić ją wartością NULL:
źródło
Możesz nawet pójść dalej i ograniczyć na tym zlewającym się polu, na przykład: -
źródło
Jeśli chcesz traktować puste kolumny jako
NULL
s, spróbuj tego:Z drugiej strony, jeśli masz
NULL
wartości, których musisz unikać, spróbuj:Zgadzam się, komunikat o błędzie bardzo by pomógł.
źródło
Jedynym sposobem, w jaki mogę nie mieć błędu z powodu NULL, znaków specjalnych lub pustego ciągu, jest zrobienie tego:
źródło
WHERE <column> != NULL
?Nie jestem w stanie skomentować (zbyt mała reputacja? Jestem całkiem nowy) pod postem Lukasa.
Na mojej konfiguracji PG
to_number(NULL)
nie działa, więc moim rozwiązaniem byłoby:źródło
NULLIF()
podejścia. Standard faktycznie definiuje NULLIF jako formę predykatu CASE.Jeśli wartość zawiera znaki nieliczbowe, możesz przekonwertować wartość na liczbę całkowitą w następujący sposób:
Operator CASE sprawdza <kolumnę>, jeśli pasuje do wzorca liczby całkowitej, konwertuje stawkę na liczbę całkowitą, w przeciwnym razie zwraca 0
źródło
możesz użyć tego zapytania
źródło
Powszechny problem
Naiwnie typ rzutujący dowolny ciąg na liczbę całkowitą, taką jak ta
Często prowadzi do słynnego błędu:
Problem
PostgreSQL nie ma predefiniowanej funkcji do bezpiecznego rzutowania dowolnego ciągu znaków na liczbę całkowitą.
Rozwiązanie
Utwórz funkcję zdefiniowaną przez użytkownika zainspirowaną funkcją intval () PHP .
Stosowanie
źródło
Moje dwa centy za rzutowanie dowolnego ciągu na liczbę całkowitą:
Na podstawie https://www.postgresqltutorial.com/regexp_replace/ .
źródło