Jak sprawdzić, czy wartość jest liczbą całkowitą w MySQL?
Widzę, że w MySQL istnieją funkcje Cast()
i Convert()
do tworzenia liczb całkowitych z wartości, ale czy jest jakiś sposób, aby sprawdzić, czy wartość jest liczbą całkowitą? Coś takiego jak is_int()
w PHP jest tym, czego szukam.
11 answers
Zakładam, że chcesz sprawdzić wartość łańcucha. Jednym z miłych sposobów jest operator REGEXP, dopasowujący łańcuch do wyrażenia regularnego. Simply do
select field from table where field REGEXP '^-?[0-9]+$';
To jest dość szybkie. Jeśli twoje pole jest numeryczne, po prostu przetestuj dla
ceil(field) = field
Zamiast tego.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-16 19:13:47
Dopasuj je do wyrażenia regularnego.
C. f. http://forums.mysql.com/read.php?60 w 1907 roku, 38488 # msg-38488 {[5] } Jak cytuję poniżej:
[1] Re: klauzula IsNumeric() w MySQL?? Dodane przez: kevinclark ()
Data: 08-08-2005 01: 01 PM
zgadzam się. Oto funkcja, którą stworzyłem dla MySQL 5:
CREATE FUNCTION IsNumeric (sIn varchar(1024)) RETURNS tinyint
RETURN sIn REGEXP '^(-|\\+){0,1}([0-9]+\\.[0-9]*|[0-9]*\\.[0-9]+|[0-9]+)$';
pozwala to na opcjonalny znak plus / minus na początku, jeden opcjonalny punkt dziesiętny, a reszta cyfra cyfry.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-05 20:13:53
Załóżmy, że mamy kolumnę z polem alfanumerycznym posiadającą wpisy typu
a41q
1458
xwe8
1475
asde
9582
.
.
.
.
.
qe84
I chcesz mieć najwyższą wartość liczbową z tej kolumny db (w tym przypadku jest to 9582), wtedy to zapytanie ci pomoże
SELECT Max(column_name) from table_name where column_name REGEXP '^[0-9]+$'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-25 08:57:49
Oto proste rozwiązanie przy założeniu, że typem danych jest varchar
select * from calender where year > 0
Zwróci true jeśli rok jest liczbą else false
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-09 11:37:32
To również działa:
CAST( coulmn_value AS UNSIGNED ) // will return 0 if not numeric string.
Na przykład
SELECT CAST('a123' AS UNSIGNED) // returns 0
SELECT CAST('123' AS UNSIGNED) // returns 123 i.e. > 0
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-24 12:33:40
Aby sprawdzić, czy wartość jest Int w Mysql, możemy użyć następującego zapytania. To zapytanie da wiersze z wartościami Int
SELECT col1 FROM table WHERE concat('',col * 1) = col;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-29 07:36:58
A co z:
WHERE table.field = "0" or CAST(table.field as SIGNED) != 0
Do badania liczbowego i korekcyjnego:
WHERE table.field != "0" and CAST(table.field as SIGNED) = 0
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-14 21:56:43
Próbowałem używać wyrażeń regularnych wymienionych powyżej, ale nie działają one dla następujących:
SELECT '12 INCHES' REGEXP '^(-|\\+){0,1}([0-9]+\\.[0-9]*|[0-9]*\\.[0-9]+|[0-9]+)$' FROM ...
Powyższe zwróci 1
(TRUE
), oznaczając test ciągu "12 cali" względem powyższego wyrażenia regularnego, zwraca TRUE
. Wygląda jak liczba oparta na powyższym wyrażeniu regularnym. W tym przypadku, ponieważ 12 znajduje się na początku łańcucha, Wyrażenie regularne interpretuje go jako liczbę.
Poniższe zwróci właściwą wartość (tj. 0
) ponieważ łańcuch zaczyna się od znaków zamiast cyfr
SELECT 'TOP 10' REGEXP '^(-|\\+){0,1}([0-9]+\\.[0-9]*|[0-9]*\\.[0-9]+|[0-9]+)$' FROM ...
Powyższe zwróci 0
(FALSE
) ponieważ początek łańcucha jest tekstowy, a nie liczbowy.
Jednakże, jeśli masz do czynienia z ciągami znaków, które mają mieszankę cyfr i liter zaczynających się od liczby, nie otrzymasz pożądanych wyników. REGEXP zinterpretuje łańcuch jako poprawną liczbę, gdy w rzeczywistości nie jest.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-17 10:27:41
Najlepsze, co mogłem wymyślić o zmiennej jest int jest kombinacją Z FUNKCJAMI MySQL CAST()
i LENGTH()
.
Ta metoda będzie działać na typach danych typu string, integers, doubles/floats.
SELECT (LENGTH(CAST([data] AS UNSIGNED))) = (LENGTH([data])) AS is_int
Zobacz demo http://sqlfiddle.com/#! 9 / ff40cd/44
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-18 10:59:37
To działa dobrze dla VARCHAR, gdzie zaczyna się od liczby lub nie..
WHERE concat('',fieldname * 1) != fieldname
Może mieć ograniczenia, gdy dojdziesz do większej liczby NNNNE+ -
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-07 12:57:41
Dla mnie działa tylko:
CREATE FUNCTION IsNumeric (SIN VARCHAR(1024)) RETURNS TINYINT
RETURN SIN REGEXP '^(-|\\+){0,1}([0-9]+\\.[0-9]*|[0-9]*\\.[0-9]+|[0-9]+)$';
Od kevinclark wszystkie inne zwracane rzeczy dla mnie w przypadku 234jk456
lub 12 inches
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-26 09:31:51