TL;DR: Khắc phục nhanh
Lỗi này hầu như luôn có nghĩa là có vấn đề với cú pháp của chuỗi truy vấn – đối số thứ hai của hàm QUERY của bạn.
- Kiểm tra tham chiếu cột: Bạn đang sử dụng
A, B, C(nếu vùng dữ liệu của bạn bắt đầu từ cột A) hayCol1, Col2, Col3(nếu vùng dữ liệu của bạn là một tập hợp con, ví dụ:B1:D100)? - Ký tự chuỗi: Đảm bảo tất cả các giá trị văn bản trong điều kiện mệnh đề
WHEREcủa bạn được đặt trong dấu nháy đơn ('text') và toàn bộ chuỗi truy vấn được đặt trong dấu nháy kép ("SELECT ... 'text'"). - Ký tự ngày: Ngày cần có định dạng cụ thể:
DATE 'YYYY-MM-DD'. - Thoát dấu nháy: Nếu ký tự chuỗi bản thân nó chứa dấu nháy đơn, bạn sẽ cần nhân đôi chúng lên (ví dụ:
'O''Malley'). - Thiếu từ khóa: Đảm bảo bạn có
SELECTở đầu truy vấn của mình.
Nguyên nhân gốc rễ chi tiết
Hàm QUERY trong Google Sheets cực kỳ mạnh mẽ, về cơ bản mang khả năng giống SQL vào bảng tính của bạn. Thông báo lỗi Unable to parse query string for Function QUERY parameter 2 cho chúng ta biết rằng trình thông dịch của Ngôn ngữ truy vấn Google Visualization API không thể hiểu bạn đang yêu cầu nó làm gì.
Tham số 2 của hàm QUERY là chuỗi truy vấn thực tế (ví dụ: "SELECT A, B WHERE C > 10"). Đây không phải là lỗi về kiểu dữ liệu của bạn trong trang tính, hay phạm vi bạn đã chọn cho tham số đầu tiên. Nó hoàn toàn về ngữ pháp và từ vựng được sử dụng trong chính chuỗi truy vấn.
Hãy hình dung nó giống như việc cố gắng nói một ngôn ngữ nước ngoài với cấu trúc câu sai hoặc dùng từ sai – người nghe (Google Sheets) đơn giản là không thể phân tích ý định của bạn. Các lý do phổ biến gây ra lỗi phân tích này bao gồm:
- Định danh cột không chính xác: Trộn lẫn
A, B, CvớiCol1, Col2, Col3một cách không phù hợp. - Sử dụng dấu nháy không đúng cho ký tự chuỗi: Các giá trị văn bản trong mệnh đề
WHEREphải được đặt trong dấu nháy đơn. - Ký tự ngày/giờ không chính xác: Ngày và giờ có một cú pháp cụ thể.
- Thiếu hoặc đặt sai vị trí từ khóa/mệnh đề: Quên
SELECT,WHERE,GROUP BY, v.v., hoặc đặt chúng sai thứ tự. - Lỗi chính tả hoặc cú pháp không hợp lệ: Những lỗi đơn giản trong từ khóa hoặc tên hàm trong chuỗi truy vấn.
- Ký tự đặc biệt không được thoát: Đặc biệt là dấu nháy đơn trong các ký tự chuỗi.
Các phương pháp khắc phục
Hãy cùng phân tích những lỗi thường gặp và cách khắc phục chúng.
1. Tham chiếu cột: A, B, C so với Col1, Col2, Col3
Đây là một nguyên nhân rất thường gặp của lỗi. Cách bạn tham chiếu đến các cột phụ thuộc vào phạm vi bạn cung cấp cho QUERY.
- Nếu vùng
datacủa bạn choQUERYbắt đầu từ cộtAvà bao gồm các cột đầy đủ (ví dụ:A:D,A1:D100), bạn nên tham chiếu các cột bằng tên chữ cái của chúng:A, B, C. - Nếu vùng
datacủa bạn là một tập hợp con các cột không bắt đầu từA(ví dụ:B1:D100), hoặc nếu bạn đang sử dụng một vùng được đặt tên đại diện cho một tập hợp con, bạn phải sử dụngCol1, Col2, Col3để tham chiếu các số cột tương đối trong phạm vi đã chọn của bạn.Col1sẽ là cột đầu tiên của phạm vi đã chọn của bạn,Col2là cột thứ hai, v.v.
Ví dụ sai (sử dụng chữ cái cột cho một phạm vi con):
=QUERY(B1:D100, "SELECT B, C WHERE D > 10")
Tại sao sai: Phạm vi B1:D100 có nghĩa là cột B giờ đây là cột đầu tiên của dữ liệu mà QUERY nhìn thấy. Vì vậy, B phải là Col1, C phải là Col2, và D phải là Col3.
Ví dụ đã sửa:
=QUERY(B1:D100, "SELECT Col1, Col2 WHERE Col3 > 10")
Một ví dụ sai khác (thường gặp với IMPORTRANGE):
=QUERY(IMPORTRANGE("spreadsheet_url", "Sheet1!C:Z"), "SELECT A, B WHERE C = 'Status'")
Tại sao sai: IMPORTRANGE ở đây đang lấy dữ liệu bắt đầu từ cột C. Vì vậy, A, B, C không còn là các tham chiếu cột hợp lệ trong phạm vi đã nhập. C sẽ là Col1, D sẽ là Col2, v.v.
Ví dụ đã sửa:
=QUERY(IMPORTRANGE("spreadsheet_url", "Sheet1!C:Z"), "SELECT Col1, Col2 WHERE Col3 = 'Status'")
2. Ký tự chuỗi và cách dùng dấu nháy
Tất cả các giá trị văn bản trong mệnh đề WHERE của bạn (hoặc các mệnh đề khác mong đợi văn bản) phải được đặt trong dấu nháy đơn ('). Toàn bộ chuỗi truy vấn được đặt trong dấu nháy kép (").
Ví dụ sai:
=QUERY(A:C, "SELECT A, B WHERE C = Active")
Tại sao sai: Active được coi là tên cột hoặc từ khóa không hợp lệ vì nó không được đặt trong dấu nháy.
Ví dụ đã sửa:
=QUERY(A:C, "SELECT A, B WHERE C = 'Active'")
Thoát dấu nháy đơn trong một chuỗi:
Nếu chuỗi bạn đang tìm kiếm chứa dấu nháy đơn (ví dụ: "O'Malley"), bạn cần thoát nó bằng cách nhân đôi dấu nháy đó lên.
Ví dụ sai:
=QUERY(A:B, "SELECT A WHERE B = 'O'Malley'")
Tại sao sai: Trình phân tích cú pháp coi 'O' là một chuỗi, sau đó Malley' là một phần không được đặt trong dấu nháy và không hợp lệ.
Ví dụ đã sửa:
=QUERY(A:B, "SELECT A WHERE B = 'O''Malley'")
3. Ký tự ngày và giờ
Ngày và giờ có cú pháp cụ thể trong QUERY. Ngày phải ở định dạng DATE 'YYYY-MM-DD'. Giờ yêu cầu TIME 'HH:MM:SS' và ngày giờ yêu cầu DATETIME 'YYYY-MM-DD HH:MM:SS'.
Ví dụ sai:
=QUERY(A:B, "SELECT A WHERE B > '2023-01-01'")
Tại sao sai: QUERY cần từ khóa DATE để hiểu '2023-01-01' là một ngày, chứ không phải chỉ là một chuỗi.
Ví dụ đã sửa:
=QUERY(A:B, "SELECT A WHERE B > DATE '2023-01-01'")
4. Thiếu từ khóa hoặc cú pháp không hợp lệ
- Luôn bắt đầu chuỗi truy vấn của bạn bằng
SELECT. - Đảm bảo các mệnh đề theo đúng thứ tự:
SELECT,WHERE,GROUP BY,PIVOT,ORDER BY,LIMIT,OFFSET,LABEL,FORMAT,OPTIONS. - Kiểm tra lỗi chính tả trong từ khóa (ví dụ:
WHERthay vìWHERE).
Ví dụ sai:
=QUERY(A:B, "A, B WHERE C = 'Done'")
Tại sao sai: Thiếu từ khóa SELECT.
Ví dụ đã sửa:
=QUERY(A:C, "SELECT A, B WHERE C = 'Done'")
5. Sử dụng tham chiếu ô để xây dựng truy vấn
Khi bạn muốn các phần của truy vấn của mình trở nên động (ví dụ: lọc dựa trên giá trị trong ô D1), bạn cần nối các phần của chuỗi truy vấn bằng toán tử &. Hãy chú ý kỹ đến dấu nháy!
Giả sử ô D1 chứa trạng thái "Pending".
Ví dụ sai:
=QUERY(A:C, "SELECT A, B WHERE C = D1")
Tại sao sai: D1 được coi là một chuỗi ký tự "D1" trong truy vấn, chứ không phải là một tham chiếu ô.
Ví dụ đã sửa (cho văn bản trong D1):
=QUERY(A:C, "SELECT A, B WHERE C = '" & D1 & "'")
Giải thích:
"SELECT A, B WHERE C = '": Bắt đầu chuỗi, bao gồm dấu nháy đơn mở cho giá trị.& D1 &: Nối giá trị của ôD1."'": Đóng dấu nháy đơn cho giá trị và đóng dấu nháy kép cho toàn bộ chuỗi truy vấn.
Ví dụ đã sửa (cho một số trong D1):
=QUERY(A:C, "SELECT A, B WHERE C = " & D1)
Lưu ý không có dấu nháy đơn xung quanh D1 đối với các số.
Ví dụ đã sửa (cho một ngày trong D1, ví dụ: 2023-01-15):
=QUERY(A:B, "SELECT A WHERE B > DATE '" & TEXT(D1, "yyyy-mm-dd") & "'")
Giải thích: Chúng ta sử dụng TEXT(D1, "yyyy-mm-dd") để đảm bảo D1 được định dạng chính xác thành một chuỗi cho ký tự DATE.
Chiến lược gỡ lỗi
Đối với các truy vấn phức tạp, hãy chia nhỏ chúng ra:
- Bắt đầu đơn giản: Bắt đầu chỉ với
SELECT Col1, Col2để đảm bảo các tham chiếu cột của bạn là chính xác. - Thêm từng mệnh đề một: Tiếp theo là thêm
WHERE, sau đó làGROUP BY,ORDER BY, v.v. Kiểm tra sau mỗi lần thêm. - Kiểm tra toàn bộ chuỗi truy vấn: Thay vì đặt truy vấn trực tiếp vào
QUERY, hãy xây dựng nó trong một ô riêng biệt (ví dụ:D2) bằng cách nối chuỗi, sau đó tham chiếuD2trong hàmQUERYcủa bạn:=QUERY(A:C, D2). Điều này cho phép bạn kiểm tra trực quan chuỗi chính xác màQUERYđang cố gắng phân tích.
Ví dụ để kiểm tra chuỗi truy vấn:
// Trong ô D2, xây dựng chuỗi truy vấn của bạn:
="SELECT A, B WHERE C = '" & E1 & "' ORDER BY A DESC"
// Trong ô F1, tham chiếu chuỗi truy vấn đã xây dựng:
=QUERY(A:C, D2)
Bằng cách này, nếu F1 gặp lỗi, bạn có thể thấy chính xác chuỗi mà D2 đã tạo ra và gỡ lỗi nó.
Các bước xác minh
- Kiểm tra kết quả công thức: Khi bạn đã áp dụng một bản sửa lỗi, hàm
QUERYgiờ đây sẽ thực thi mà không gặp lỗi "Unable to parse query string". - Xác thực dữ liệu: Đảm bảo kết quả trả về bởi hàm
QUERYlà những gì bạn mong đợi. Đôi khi một bản sửa lỗi cú pháp có thể làm cho truy vấn chạy được, nhưng nó có thể không lọc hoặc chọn đúng nếu còn tồn tại các lỗi logic tinh vi (ví dụ: tìm kiếm'Active'trong khi trang tính thực sự chứa'active'). - Kiểm tra các trường hợp biên: Nếu truy vấn của bạn sử dụng tham chiếu ô, hãy thử thay đổi các giá trị trong các ô tham chiếu đó để đảm bảo truy vấn thích ứng chính xác mà không bị lỗi.
Đọc thêm
- Tìm kiếm "Google Sheets QUERY function" trong tài liệu chính thức của Google để có hướng dẫn toàn diện.
- Khám phá "Google Visualization API Query Language Reference" để biết đặc tả ngôn ngữ cơ bản.

