2010-01-16 28 views
17

Tôi nhớ đọc về trích dẫn nội dung khi thực hiện truy vấn SQL và khi bạn trích dẫn nội dung nào đó, nó sẽ trở thành một chuỗi. Tôi cũng đọc những con số đó không nên được trích dẫn. Bây giờ, tôi không thể tìm thấy báo giá đó và tôi cần phải làm mới bộ nhớ của mình để xem liệu tôi có nên trích dẫn số liệu hay không.Tôi có nên trích dẫn các số trong SQL không?

+3

Phụ thuộc vào cách giá trị được lưu trữ trong db. Nếu được lưu dưới dạng văn bản, hãy trích dẫn nó, nếu được lưu dưới dạng số không :-) – bernie

+1

Đó không phải là số, đó là mã. Giống như ID sản phẩm hoặc tương tự. Một số là thứ bạn sử dụng để tính toán. Một số không nên được trích dẫn vì một số không bao giờ được lưu trữ trong cơ sở dữ liệu dưới dạng chuỗi. –

+0

@Một người nào đó bạn có một nguồn cho định nghĩa của bạn rằng một ID bao gồm các chữ số không phải là một số và do đó nên được trích dẫn? Và nếu đó là một ID tương ứng với các hàng trong một bảng như 1 cho row1 e.t.c thì sao? – barlop

Trả lời

12

Bạn không được báo giá số.

Bạn chính xác bằng cách nhớ rằng nó biến chuỗi thành chuỗi.

SELECT 10 AS x 

là hoàn toàn hợp pháp và sẽ trở lại (trong hầu hết các cơ sở dữ liệu) một cột kiểu dữ liệu int (hoặc một biến thể đó.)

tôi nhận thấy những nhận xét cho câu hỏi của bạn bằng cách Adam, và tôi muốn để đưa ra nhận xét về điều đó, nhưng tôi sẽ chỉnh sửa câu trả lời này bởi vì tôi nghĩ đó là một điểm quan trọng.

Trích dẫn "số" trong SQL thường được thực hiện khi nó không phải là thực sự là một số, nhưng thay vào đó một đang.

Bằng số Tôi có nghĩa là một số thứ bạn có thể đếm, tổng hợp, tính bằng, mã là số nhận dạng.

Vì vậy, SSN là mã, đó là mã duy nhất của bạn (tôi biết, chữ N viết tắt là "số", bit của từ sai nếu bạn hỏi tôi), nhưng bạn sẽ không tính giá trị trung bình của tất cả SSN trong cơ sở dữ liệu.

Nếu bạn lưu trữ ID sản phẩm trong cơ sở dữ liệu dưới dạng chuỗi, nhưng trên thực tế chúng chỉ được tạo thành từ các chữ số, sau đó chúng là mã, chứ không phải số.

Mã nên được trích dẫn, số không nên.

1

Tôi không biết những gì bạn có thể đã đọc, nhưng không báo giá số.

6

Dưới đây là một ví dụ, nơi trích dẫn sẽ tạo ra kết quả không phù hợp (trong MySQL):

select 1 < 1.0;  // returns 0 

select '1' < '1.0'; // returns 1 

Đó là bởi vì sự so sánh thứ hai được thực hiện bằng cách sử dụng chuỗi đối chiếu hiện tại chứ không phải số lượng.

Không nên trích dẫn số, vì đó sẽ là một bước không cần thiết bổ sung để cơ sở dữ liệu chuyển đổi chuỗi ký tự thành một giá trị số để so sánh và có thể thay đổi ý nghĩa của so sánh.

0

eh ... không bạn không nên?

tôi giả sử bạn có nghĩa là bằng cách trích dẫn kèm theo trong 'like 'this'

INSERT INTO table (foo) VALUES (999); là hoàn toàn hợp pháp miễn là foo là một kiểu INT collumn INSERT INTO table (foo) VALUES('foo'); Chèn chuỗi foo vào bảng. Bạn không thể làm điều này trên các bảng kiểu INT của khóa học.

1

Rõ ràng, đừng quên kiểm tra để đảm bảo rằng bất kỳ giá trị nào bạn đã vượt qua thực sự là một con số.

0

Vâng, có nguy cơ cháy ngọn lửa, tôi có thể kính trọng không đồng ý một chút ở đây rằng KHÔNG BAO GIỜ có thể sử dụng dấu nháy đơn xung quanh một giá trị số không?Dường như với tôi rằng nó SOMETIMES có ý nghĩa để sử dụng dấu nháy đơn xung quanh một giá trị số. Nếu col1 là một cột INT, sau đó (sử dụng VBScript là một ví dụ)

sql = "INSERT " & foo & " INTO col1 WHERE ID = 1" 

sql = "INSERT '" & foo & "' INTO col1 WHERE ID = 1" 

sẽ CẢ, khi sql được thực thi, chèn thêm bất kỳ giá trị số nguyên của foo một cách chính xác. Nhưng nếu bạn muốn 0 được chèn vào khi foo không được khởi tạo? Sử dụng biểu thức số được trích dẫn như thế này sẽ ngăn lỗi và xử lý trường hợp rỗng. Cho dù bạn có nghĩ đây là thực hành tốt hay không, điều đó chắc chắn đúng.

Các vấn đề liên quan