How to query table when table name has hyphen in Redshift Spectrum? - sql

I am attempting to query a table that has a hyphen in it.
I have tried backticks and quotes (`, ', ") and they don't work.
Query
select * from hubspot.contacts__form-submissions
Error message:
Error running query: syntax error at or near "-" LINE 7: from hubspot.contacts__form-submissions ^
I don't have write permissions so I can't rename the table.
Any suggestions on how I can query this?

Try
select * from hubspot."contacts__form-submissions";

Related

Execution error: [Vertica][VJDBC](4856) ERROR: Syntax error at or near "."

Trying to insert this activity into my table but getting the error seen below. Any thoughts? SQL query checkers keep telling me its in my insert statement but I'm not seeing any outlier on my end. Thanks!
INSERT INTO
"_CEL_MD_ACTIVITIES" ("_CEL_MD_ACTIVITIES"."CASE_KEY", "_CEL_MD_ACTIVITIES"."ACTIVITY_EN", "_CEL_MD_ACTIVITIES"."EVENTTIME")
SELECT
"_CEL_MD_CASE_TABLE"."CASE_ID" AS "_CEL_MD_ACTIVITIES"."CASE_KEY",
'Case Reopened' AS "_CEL_MD_ACTIVITIES"."ACTIVITY_EN",
"_CEL_MD_CASE_TABLE"."CASE_REOPEN_DATE" AS "_CEL_MD_ACTIVITIES"."EVENTTIME"
FROM
"_CEL_MD_CASE_TABLE"
JOIN
"_CEL_MD_ACTIVITIES"
ON "_CEL_MD_CASE_TABLE"."CASE_ID" = "_CEL_MD_ACTIVITIES"."CASE_KEY"
WHERE
"_CEL_MD_CASE_TABLE"."CASE_REOPEN_DATE" IS NOT NULL;
Execution error: [Vertica]VJDBC ERROR: Syntax error at or near
"."
You use as aliases the name and fields of a table involved in the join.
For example
AS "_CEL_MD_ACTIVITIES"."ACTIVITY_EN",
This is not correct. You should change your alias names and not use dots (.) in them or remove the usage of aliases

How to add a string literal as one selected column for select queries?

I want to have query like below
select "RETRY" as code , name from process ;
then the results are
code | name
_____________
RETRY PX1
RETRY PX1
RETRY PX3
RETRY PX4
RETRY PX5
I want to add one string literal as column for all rows returned by select query. I am trying this in PostgreSQL, but getting the following error:
SQL Error [42703]: ERROR: column "RETRY" does not exist
Position: 8
yny idea how to do this in a PostgreSQL select query?
double quote refers column name of that table thats why you are getting error you have to use single quote
select 'RETRY' as code , name from process ;
String literals need to be enclosed in single quotes in SQL:
select 'RETRY' as code, name
from process;

psql column doesn't exist but it does

I am trying to select a single column in my data table using raw SQL in a postgresql database from the psql command line. I am getting an error message that says the column does not exist. Then it gives me a hint to use the exact column that I referenced in the select statement. Here is the query:
SELECT insider_app_ownershipdocument.transactionDate FROM insider_app_ownershipdocument;
Here is the error message:
ERROR: column insider_app_ownershipdocument.transactiondate does not exist
SELECT insider_app_ownershipdocument.transactionDate FROM in...
HINT: Perhaps you meant to reference the column "insider_app_ownershipdocument.transactionDate".
I have no idea why this is not working.
(Postgres) SQL converts names automatically to lower case although it support case-sensitive names. So
SELECT insider_app_ownershipdocument.transactionDate FROM insider_app_ownershipdocument;
will be aquivalent to:
SELECT insider_app_ownershipdocument.transactiondate FROM insider_app_ownershipdocument;
You should protect the column name with double quotes to avoid this effect:
SELECT insider_app_ownershipdocument."transactionDate" FROM insider_app_ownershipdocument;

"Syntax error at or near ' , '" while trying to SELECT INTO

The query for selecting multiple values and assigning to multiple variables in a single SELECT query leads to an error. My Postgres version is 9.5.
The query is:
SELECT INTO region_id ,doc_type,tax_amt fk_bint_supplier_tax_region_id,chr_supporting_document_type,
dbl_base_currency_client_net-dbl_base_currency_market_fare-dbl_base_currency_cc_charge_collected+
dbl_base_currency_vat_in+dbl_base_currency_cc_charge_collected+(19*(dbl_base_currency_tax))*5/10
FROM tbl_sales_details WHERE chr_document_status='N' AND vchr_document_no='INV/47922/01/18'
AND vchr_supporting_document_no='5111143004'
The error is:
ERROR: syntax error at or near ","
LINE 1: SELECT INTO region_id ,doc_type,tax_amt fk_bint_supplier_ta...
^
********** Error **********
ERROR: syntax error at or near ","
SQL state: 42601
SELECT INTO in PL/pgSQL has a different meaning from
SELECT INTO in SQL. The latter is generally discouraged. The manual:
CREATE TABLE AS is functionally similar to SELECT INTO. CREATE TABLE AS
is the recommended syntax, since this form of SELECT INTO is not
available in ECPG or PL/pgSQL, because they interpret the INTO clause
differently. Furthermore, CREATE TABLE AS offers a superset of the
functionality provided by SELECT INTO.
The error message indicates you tried to run the statement as plain SQL.
There's nothing wrong with your placement of the INTO clause when used in PL/pgSQL like you tagged. You also stated that it's for:
assigning to multiple variables
That, too, only makes sense inside procedural language code as there are no variable assignments in plain SQL.
Related:
SELECT INTO with more than one attribution
You put the into after the column list:
SELECT region_id, doc_type,tax_amt fk_bint_supplier_tax_region_id, chr_supporting_document_type,
(dbl_base_currency_client_net - dbl_base_currency_market_fare -
dbl_base_currency_cc_charge_collected +
dbl_base_currency_vat_in + dbl_base_currency_cc_charge_collected + 19 * dbl_base_currency_tax
) * 5/10
INTO . . .
FROM tbl_sales_details
WHERE chr_document_status = 'N' AND
vchr_document_no = 'INV/47922/01/18' AND
vchr_supporting_document_no = '5111143004';
I don't know what the variable names are, but the go after the INTO and there must be one for each expression in the SELECT.

Selecting a column with period in the column name SQL Server

I am linked to a Proficy Historian that allows periods in the column names. Because the data is stored in a non DBMS format I can not use openquery to get the data because there is no set schema to the tables. So I must use four part name syntax to get the data. This example works:
SELECT * FROM iHist...[SELECT * FROM ihTrend]
but this fails with Incorrect syntax near '.'.
SELECT * FROM iHist...[SELECT [SERVER.pid_astatus[07][0].F_CV.Value] FROM ihTrend]
where SERVER.pid_astatus[07][0].F_CV.Value is the name of the column
This fails as well with Incorrect syntax near the keyword 'from'.
SELECT * FROM
iHist...[SELECT [SERVER.pid_astatus[[07]][[0]].F_CV.Value] from ihTrend]`
Any ideas on how I can make SQL Server see this as a column?
EDIT:
Martins suggestion of the right brackets to escape the brackets work only on the outside of the sql call
SELECT [SERVER.pid_astatus[07]][0]].F_CV.Value] FROM iHist...[SELECT * FROM ihTrend]
However it does not work inside Incorrect syntax near the keyword 'from'.
SELECT * FROM iHist...[SELECT [SERVER.pid_astatus[07]][0]].F_CV.Value] FROM ihTrend]
EDIT
SELECT * FROM iHist...[SELECT [SERVER.pid_astatus[07]][0]].F_CV.Value]] FROM ihTrend]
I had to escape the column escape :)
You only need to escape these ]
[pid_astatus[07]][0]].F_CV.Value]
This works for me
CREATE TABLE #t(
[pid_astatus[07]][0]].F_CV.Value] int
)
SELECT [pid_astatus[07]][0]].F_CV.Value]
FROM #t
(Edited to reflect new knowledge, if you like this vote for Martin Smith's answer instead!)
Escape the ] by doubling them:
SELECT * FROM
iHist...[SELECT [SERVER.pid_astatus[07]][0]].F_CV.Value] from ihTrend]
Based on your comment, try:
SELECT [SERVER.pid_astatus[07]][0]].F_CV.Value] FROM iHist...ihTrend