Như một phần bổ sung cho câu trả lời từ dan04, nếu bạn muốn chèn một cách mù quáng NUMERIC
khác với số 0 được đại diện bởi một TEXT
nhưng đảm bảo rằng văn bản có thể chuyển đổi thành số:
your_numeric_col NUMERIC CHECK(abs(your_numeric_col) <> 0)
Trường hợp sử dụng điển hình là trong một truy vấn từ một chương trình coi tất cả dữ liệu là văn bản (để đồng nhất và đơn giản, vì SQLite đã làm như vậy). Điều thú vị về điều này là nó cho phép các cấu trúc như thế này:
INSERT INTO table (..., your_numeric_column, ...) VALUES (..., some_string, ...)
điều này thuận tiện trong trường hợp bạn đang sử dụng trình giữ chỗ vì bạn không phải xử lý đặc biệt các trường số khác 0 như vậy. Một ví dụ sử dụng sqlite3
mô-đun của Python sẽ là,
conn_or_cursor.execute(
"INSERT INTO table VALUES (" + ",".join("?" * num_values) + ")",
str_value_tuple) # no need to convert some from str to int/float
Trong ví dụ trên, tất cả các giá trị trong str_value_tuple
sẽ được thoát và được trích dẫn dưới dạng chuỗi khi được chuyển đến SQlite. Tuy nhiên, vì chúng tôi không kiểm tra rõ ràng kiểu thông qua TYPEOF
mà chỉ có khả năng chuyển đổi sang kiểu , nên nó sẽ vẫn hoạt động như mong muốn (tức là SQLite sẽ lưu trữ dưới dạng số hoặc không thành công).