SQLite
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> SQLite

2 Cách Chỉ Trả lại Giá trị Số từ Cột Cơ sở dữ liệu SQLite

Các ví dụ SQLite sau chỉ trả về những hàng có giá trị số trong một cột nhất định.

Dữ liệu mẫu

Hãy tạo một bảng với dữ liệu mẫu:

DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
    c1
);

INSERT INTO t1 (c1) VALUES 
    (0),
    (1),
    (+1),
    (-1),
    (00.00),
    (73.45),
    (+73.45),
    (-73.45),
    (.246),
    (-.34e7),
    (12.e-3),
    (1.2e+4),
    ('Ten'),
    ('5 Dollars');

SELECT * FROM t1;

Bảng hiện đã được tạo và chứa dữ liệu sau:

c1        
----------
0         
1         
1         
-1        
0.0       
73.45     
73.45     
-73.45    
0.246     
-3400000.0
0.012     
12000.0   
Ten       
5 Dollars 

SQLite sử dụng hệ thống kiểu động, trong đó kiểu dữ liệu của một giá trị được liên kết với chính giá trị đó, không phải cột (như với hầu hết các RDBMS khác). Khi tạo bảng, tôi không chỉ định loại dữ liệu. Do đó, các giá trị có thể là bất kỳ kiểu nào.

Typeof() Chức năng

Chúng ta có thể sử dụng hàm typeof () của SQLite để lọc kết quả chỉ thành các kiểu số (realinteger ):

SELECT c1
FROM t1
WHERE typeof(c1) = 'real'
OR typeof(c1) = 'integer';

Kết quả:

c1        
----------
0         
1         
1         
-1        
0.0       
73.45     
73.45     
-73.45    
0.246     
-3400000.0
0.012     
12000.0   

Nói rõ hơn, đây là một ví dụ xuất ra loại dữ liệu cho mỗi hàng:

SELECT 
    c1,
    typeof(c1)
FROM t1;

Kết quả:

c1          typeof(c1)
----------  ----------
0           integer   
1           integer   
1           integer   
-1          integer   
0.0         real      
73.45       real      
73.45       real      
-73.45      real      
0.246       real      
-3400000.0  real      
0.012       real      
12000.0     real      
Ten         text      
5 Dollars   text      

REGEXP Chức năng

Nếu chúng tôi có các yêu cầu cụ thể hơn, chúng tôi có thể sử dụng REGEXP một cách khác để chuyển một biểu thức chính quy để chỉ trả về những giá trị khớp với mẫu đã cho.

Ví dụ:

SELECT c1
FROM t1 
WHERE c1 REGEXP '^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$';

Kết quả:

c1        
----------
0         
1         
1         
-1        
0.0       
73.45     
73.45     
-73.45    
0.246     
-3400000.0
0.012     
12000.0   

Trả về số nguyên

Nếu chúng ta chỉ muốn trả về số nguyên, chúng ta có thể đơn giản hóa truy vấn như sau:

SELECT c1
FROM t1
WHERE typeof(c1) = 'integer';

Kết quả:

c1
--
0 
1 
1 
-1

Điều này cũng trả về số nguyên có dấu.

Hoặc chúng tôi có thể sử dụng biểu thức chính quy nếu yêu cầu của chúng tôi cụ thể hơn:

SELECT c1
FROM t1 
WHERE c1 REGEXP '^[0-9]+$';

Kết quả:

c1
--
0 
1 
1 

Chứa dữ liệu số

Nếu chúng ta muốn tìm các hàng có chứa dữ liệu số (ngay cả khi chúng cũng chứa dữ liệu không phải là số), chúng ta có thể thực hiện như sau:

SELECT c1 
FROM t1 
WHERE c1 REGEXP '[0-9]+';

Kết quả:

c1        
----------
0         
1         
1         
-1        
0.0       
73.45     
73.45     
-73.45    
0.246     
-3400000.0
0.012     
12000.0   
5 Dollars 

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để sử dụng hình ảnh trong Android SQLite lớn hơn các giới hạn của CursorWindow?

  2. Tùy chọn tốt nhất để lưu trữ tên người dùng và mật khẩu trong ứng dụng Android

  3. Android:onUpgrade không gọi khi nâng cấp cơ sở dữ liệu

  4. Tham gia SQLite

  5. Làm cách nào để thêm số hàng trống cụ thể trong sqlite?