Tôi thấy rằng trong MySQL có các hàm Cast()
và Convert()
để tạo số nguyên từ các giá trị, nhưng có cách nào để kiểm tra xem liệu giá trị có phải là số nguyên không? Một cái gì đó như is_int()
trong PHP là những gì tôi đang tìm kiếm.Làm cách nào để kiểm tra xem liệu giá trị có phải là số nguyên trong MySQL không?
Trả lời
Tôi giả sử bạn muốn kiểm tra giá trị chuỗi. Một cách tốt đẹp là toán tử REGEXP, khớp chuỗi với một biểu thức chính quy. Chỉ cần thực hiện
select field from table where field REGEXP '^-?[0-9]+$';
điều này là khá nhanh. Nếu trường của bạn là số, chỉ cần thử nghiệm cho
ceil(field) = field
thay thế.
Các 'ceil (lĩnh vực) = trường' thử nghiệm là một ý tưởng hay, nhưng như @ Jumpy đã chỉ ra, nó không thành công trên dữ liệu phi số: SELECT ceil ('bốn') = 'bốn'; -> 1 –
@MatthewCornell, Anh ấy nói nếu trường của bạn là số. Đó là để bạn có thể kiểm tra nếu một số là một số nguyên. Nó sẽ không hoạt động trên dây, đó là lý do tại sao tùy chọn đầu tiên là có. – Malfist
Nếu dữ liệu có thể bao gồm khoảng trắng, điều này sẽ không thành công. Xem xét thử nghiệm trim (trường), có thể với một arg thêm để loại bỏ newlines. –
Khớp với biểu thức chính quy.
c.f. http://forums.mysql.com/read.php?60,1907,38488#msg-38488 như được trích dẫn bên dưới:
Điều khoản IsNumeric() trong MySQL ??
Đăng bởi: kevinclark()
ngày: 8 tháng 8 năm 2005 13:01
Tôi đồng ý. Đây là một chức năng tôi đã tạo cho 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]+)$';
Điều này cho phép một dấu hiệu bắt buộc cộng/trừ ngay từ đầu, một dấu thập phân tùy chọn và ký tự số còn lại.
Cảm ơn, giải pháp của bạn sẽ chăm sóc của số thập phân cũng – Ananda
Dưới đây là giải pháp đơn giản cho nó giả định kiểu dữ liệu là varchar
select * from calender where year > 0
Nó sẽ trả về true nếu năm là số khác sai
Tôi đã cố gắng sử dụng các biểu thức thông thường được liệt kê ở trên, nhưng họ không làm việc sau:
SELECT '12 INCHES' REGEXP '^(-|\\+){0,1}([0-9]+\\.[0-9]*|[0-9]*\\.[0-9]+|[0-9]+)$' FROM ...
trên sẽ trở 1
(TRUE
), có nghĩa là kiểm tra chuỗi '12 INCHES 'so với cụm từ thông dụng ở trên, trả về TRUE
. Nó trông giống như một số dựa trên biểu thức chính quy được sử dụng ở trên. Trong trường hợp này, vì 12 là ở đầu chuỗi, cụm từ thông dụng diễn giải nó dưới dạng một số.
Sau đây sẽ trả về giá trị đúng (ví dụ 0
) vì chuỗi bắt đầu với ký tự thay vì các chữ số
SELECT 'TOP 10' REGEXP '^(-|\\+){0,1}([0-9]+\\.[0-9]*|[0-9]*\\.[0-9]+|[0-9]+)$' FROM ...
trên sẽ trở 0
(FALSE
) vì đầu của chuỗi là văn bản và không số .
Tuy nhiên, nếu bạn đang xử lý các chuỗi có kết hợp các số và chữ cái bắt đầu bằng một số, bạn sẽ không nhận được kết quả mong muốn. REGEXP sẽ giải thích chuỗi là một số hợp lệ khi thực tế nó không phải là.
Điều này là không chính xác. Bạn đã thử nó chưa? Khi tôi chạy ví dụ đầu tiên của bạn, nó trả về 'FALSE', như mong đợi, bởi vì regex kết thúc bằng' $ 'có nghĩa là kết thúc của chuỗi, vì vậy nó chỉ kiểm tra các số, theo dự định của tác giả. – spikyjt
gì về:
WHERE table.field = "0" or CAST(table.field as SIGNED) != 0
để kiểm tra số và corrolary:
WHERE table.field != "0" and CAST(table.field as SIGNED) = 0
CAST (table.field)! = 0 sẽ không hoạt động vì nó cần loại để truyền. – Riad
Điều này hoạt động hoàn hảo nếu bạn cần kiểm tra các mục không phải là số, điều này xứng đáng nhận được nhiều +1 hơn. Các câu trả lời khác khó đảo ngược bài kiểm tra hơn để tìm các mục không phải là số. – DrCord
Điều này không hoạt động đối với các số như "0000", "0" (khoảng trắng) và "7x" (được coi là số). –
Giả sử chúng ta đã cột với mục lĩnh vực có chữ và số như
a41q
1458
xwe8
1475
asde
9582
.
.
.
.
.
qe84
và bạn muốn cao nhất giá trị số từ cột db này (trong trường hợp này là 9582) thì truy vấn này sẽ giúp bạn
SELECT Max(column_name) from table_name where column_name REGEXP '^[0-9]+$'
* '10000' * là cao hơn, nhưng truy vấn của bạn vẫn sẽ trở lại * '9582' *. –
này cũng hoạt động:
CAST(coulmn_value AS UNSIGNED) // will return 0 if not numeric string.
ví dụ
SELECT CAST('a123' AS UNSIGNED) // returns 0
SELECT CAST('123' AS UNSIGNED) // returns 123 i.e. > 0
Còn 'SELECT CAST ('12a34' AS UNSIGNED)', trả về '12' thì sao? –
Điều này hoạt động hoàn hảo nếu bạn cần kiểm tra các mục không phải là số, điều này xứng đáng được +1 nhiều hơn. Các câu trả lời khác khó đảo ngược bài kiểm tra hơn để tìm các mục không phải là số. – DrCord
@DrCord điều này không làm việc cho trường hợp Mike C mô tả, do đó là rất không đáng tin cậy – jontro
Để kiểm tra xem một giá trị là Int trong Mysql, chúng ta có thể sử dụng các truy vấn sau đây. Truy vấn này sẽ cung cấp cho các hàng với Int giá trị
SELECT col1 FROM table WHERE concat('',col * 1) = col;
Câu trả lời này làm việc cho tôi. – Pupil
Điều này cũng sẽ chọn các số không phải số nguyên (ví dụ: * '3.5' *). –
này hoạt động tốt cho VARCHAR nơi nó bắt đầu với một số hay không ..
WHERE concat('',fieldname * 1) != fieldname
có thể có những hạn chế khi bạn nhận được để càng lớn NNNNE + - số
đối với tôi là điều duy nhất mà làm việc là:
CREATE FUNCTION IsNumeric (SIN VARCHAR(1024)) RETURNS TINYINT
RETURN SIN REGEXP '^(-|\\+){0,1}([0-9]+\\.[0-9]*|[0-9]*\\.[0-9]+|[0-9]+)$';
từ kevinclark tất cả trở lại thứ vô ích khác đối với tôi trong trường hợp 234jk456
hay 12 inches
- 1. Làm cách nào để kiểm tra xem một giá trị có phải là số không?
- 2. kiểm tra xem giá trị của một trường text có phải là số nguyên trong javascript
- 3. Làm cách nào để kiểm tra xem chuỗi có giá trị bằng số trong Python không?
- 4. Kiểm tra xem một giá trị từ scanf có phải là một số không?
- 5. Làm cách nào để kiểm tra xem biến có phải là nguyên thủy trong PHP
- 6. Cách tốt hơn để kiểm tra xem chuỗi có phải là số nguyên trên iPhone không?
- 7. Kiểm tra xem một số nguyên có phải là số nguyên của một số khác
- 8. Cách kiểm tra xem chuỗi có phải là một trong các giá trị đã biết không?
- 9. Có chức năng nào để kiểm tra xem biến chuỗi là giá trị số không?
- 10. Cách nhanh nhất để kiểm tra xem tất cả các giá trị trong một mảng có phải là số không?
- 11. Có cách nào để kiểm tra xem một biến có phải là một số nguyên không? C++
- 12. Java, Kiểm tra xem số nguyên có phải là bội số của một số
- 13. PHP kiểm tra xem có bất kỳ giá trị mảng nào không phải là chuỗi hoặc số không?
- 14. Kiểm tra xem loại biến có phải là nguyên thủy
- 15. Làm thế nào để kiểm tra, nếu một giá trị là một số nguyên với plpgsql?
- 16. Kiểm tra xem một chuỗi có phải là số
- 17. Cách kiểm tra xem giá trị có được chọn trong tham số nhiều giá trị
- 18. Kiểm tra xem giá trị nguyên đã tăng chưa?
- 19. Kiểm tra nếu giá trị là một số nguyên trong Sass
- 20. Cách tốt nhất để kiểm tra xem cặp đôi có phải là số nguyên trong C# không?
- 21. Cách chính xác để kiểm tra xem giá trị là ngày/số trong Delphi
- 22. Làm cách nào để kiểm tra xem nhiều biến có bằng cùng một giá trị không?
- 23. Kiểm tra xem mysqli_query có không có giá trị không?
- 24. Java - Cách kiểm tra xem một bộ phận có phải là một số nguyên hay một phao không?
- 25. Làm cách nào để kiểm tra xem biến có giá trị số chẵn (không lẻ) trong bash không?
- 26. Kiểm tra xem Html.ValidationSummary() có giá trị
- 27. Kiểm tra xem đây có phải là
- 28. Trong C#, cách kiểm tra xem chuỗi có chứa số nguyên không?
- 29. Làm cách nào để kiểm tra xem giá trị mảng có trống không?
- 30. Có cách nào để kiểm tra xem biến có phải là Ngày trong JavaScript không?
nên buồn bã chúng ta phải tạo is_int() chức năng trong Mysql –