2010-01-02 75 views

Trả lời

107

Dấu nháy đơn được sử dụng để cho biết bắt đầu và kết thúc chuỗi trong SQL. Dấu ngoặc kép thường không được sử dụng trong SQL, nhưng điều đó có thể khác nhau từ cơ sở dữ liệu đến cơ sở dữ liệu.

Gắn vào sử dụng dấu nháy đơn.

Đó là cách sử dụng chính. Bạn có thể sử dụng dấu nháy đơn cho một bí danh cột - nơi bạn muốn tên cột mà bạn tham chiếu trong mã ứng dụng của mình là một cái gì đó khác với cột mà thực sự được gọi trong cơ sở dữ liệu. Ví dụ: PRODUCT.id sẽ dễ đọc hơn như product_id, vì vậy bạn sử dụng một trong những điều sau đây:

  • SELECT PRODUCT.id AS product_id
  • SELECT PRODUCT.id 'product_id'

Hoặc làm việc tại Oracle, SQL Server, MySQL ... nhưng tôi biết một số đã nói rằng IDE TOAD dường như mang lại một số đau buồn khi sử dụng phương pháp trích dẫn đơn.

Bạn phải sử dụng dấu nháy đơn khi bí danh cột bao gồm ký tự khoảng trắng, ví dụ: product id, nhưng không nên thực hành bí danh cột nhiều hơn một từ.

+22

Dấu ngoặc kép thường được sử dụng để đối tượng tên (ví dụ: tên cột "Tên đầu tiên"). Đó là một phần của tiêu chuẩn SQL-92. – LukLed

+0

@LukLed: Bạn có nghĩa là một cột * bí danh *? Nếu bạn nói như vậy - Tôi đã từng thấy và/hoặc sử dụng ký hiệu 'AS column_name' hoặc nơi bạn cung cấp bí danh trong ** dấu nháy đơn ** sau khi tham chiếu cột. Phải kèm theo bí danh trong dấu nháy đơn nếu có ký tự khoảng trắng (mà tôi không khuyên dùng) trong bí danh cột. –

+17

No. Tôi có nghĩa là tên cột, nhưng nó liên quan đến bí danh quá. Tôi khuyên bạn nên sử dụng dấu ngoặc kép cho bí danh và tên có các ký tự không bình thường, vì tiêu chuẩn SQL-92. 'SELECT * FROM USERS 'Users' không hoạt động trong SQL Server, nhưng' SELECT * FROM USERS "Users" '. – LukLed

31

Trong ANSI SQL, hãy báo giá gấp đôi tên đối tượng trích dẫn (ví dụ: bảng) cho phép chúng chứa các ký tự không được cho phép hoặc giống với các từ dành riêng (Tránh điều này).

Dấu ngoặc đơn là dành cho chuỗi.

Tuy nhiên, MySQL không biết gì về tiêu chuẩn (trừ khi SQL_MODE của nó bị thay đổi) và cho phép chúng được sử dụng thay thế cho chuỗi.

Hơn nữa, Sybase và Microsoft cũng sử dụng dấu ngoặc vuông cho báo giá số nhận dạng.

Vì vậy, đó là một nhà cung cấp bit cụ thể.

cơ sở dữ liệu khác như Postgres và IBM thực sự tuân thủ các tiêu chuẩn ansi :)

+4

MySql sử dụng backtick 'để nhận dạng trích dẫn. (chỉ để hoàn thành) – dar7yl

+0

Ví dụ: Nếu bạn muốn đặt tên cho một cột Postgres là "date" (được đặt trước), bạn sẽ cần phải báo giá gấp đôi nó. – fny

55

Dấu nháy đơn phân định một chuỗi liên tục hoặc một hằng ngày/giờ.

Trích dẫn kép phân định số nhận dạng cho ví dụ: tên bảng hoặc tên cột. Điều này thường chỉ cần thiết khi số nhận dạng của bạn không phù hợp với các quy tắc cho số nhận dạng đơn giản.

Xem thêm:

Bạn có thể làm cho MySQL sử dụng dấu nháy kép theo tiêu chuẩn ANSI:

SET GLOBAL SQL_MODE=ANSI_QUOTES 

Bạn có thể làm cho Microsoft SQL Server sử dụng hai dấu ngoặc kép theo tiêu chuẩn ANSI:

SET QUOTED_IDENTIFIER ON 
35
  • [S] dấu ngoặc kép dành cho các bài hát [S]; [D] Dấu ngoặc kép là dành cho [D] số nhận dạng cơ sở dữ liệu;
  • Biểu tượng ' là giống như " biểu tượng. Bạn có thể sử dụng " với ANSI_QUOTES kích hoạt.
+4

Để làm rõ, backtick (') có thể được sử dụng để phân định số nhận dạng cho dù ANSI_QUOTES có được bật hay không, nhưng nếu ANSI_QUOTES được bật, thì" bạn không thể sử dụng dấu ngoặc kép để trích dẫn chuỗi chữ, vì nó được hiểu là số nhận dạng. " ([source] (https://dev.mysql.com/doc/refman/5.6/en/sql-mode.html#sqlmode_ansi_quotes)). (Tất cả điều này giả định bạn đang nói về MySQL, tâm trí.) – Sam

+0

Cảm nhận tốt, cảm ơn! –

1

tôi sử dụng ghi nhớ này:

  • Dấu nháy đơn là cho các chuỗi (một điều)
  • dấu ngoặc kép được cho các bảng tên và tên cột (hai điều)

Đây là không đúng 100% theo các thông số kỹ thuật, nhưng điều này sẽ giúp tôi (con người).

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