我被一个从bash脚本中运行的SQL查询所困扰。
下面的工作和输出的文件符合预期,但有一些字段包含逗号,我希望这些字段被包含,但逗号被转义。
FILE="/var/lib/mysql-files/UMHP/ConditionAssessment.csv"
mysql --user='root' --password='xxxxxxxxxxxxxxx' UMHPSurvey << EOFMYSQL
SELECT
DateEntry AS 'Entry Date',
FirstName AS 'First Name',
LastName As 'Last Name',
member_id as 'Member ID',
mobile AS 'Mobile',
Doctor AS 'Need help getting connected to a doctor',
CASE WHEN HealthConditions LIKE '%Asthma%' THEN 'Yes' ELSE 'No' END AS 'Asthma',
CASE WHEN HealthConditions LIKE '%COPD%' THEN 'Yes' ELSE 'No' END AS 'COPD',
CASE WHEN HealthConditions LIKE '%Cancer' THEN 'Yes' ELSE 'No' END AS 'Cancer',
CASE WHEN HealthConditions LIKE '%CHF%' THEN 'Yes' ELSE 'No' END AS 'CHF',
CASE WHEN HealthConditions LIKE '%Diabetes%' THEN 'Yes' ELSE 'No' END AS 'Diabetes',
CASE WHEN HealthConditions LIKE '%Hypertension (High Blood Pressure)%' THEN 'Yes' ELSE 'No' END AS 'Hypertension (High Blood Pressure)',
AdditionalConditionsDescription AS 'Additional Health Conditions',
MedicationQuestions AS 'Questions about meds',
InsuranceQuestionsDescription AS 'Healthcare concerns'
FROM UMHPSurvey.Assessment
where Doctor = 'Yes' or ConditionQuestions = 'Yes' or AdditionalConditions = 'Yes'
or MedicationQuestions = 'Yes' or Concerns = 'Yes'
INTO OUTFILE '$FILE' FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
EOFMYSQL
下面的代码不能正常工作
FILE="/var/lib/mysql-files/ConditionAssessment.csv"
mysql --user='root' --password='xxxxxxxxxxxxxxx' UMHPSurvey << EOFMYSQL
SELECT
DateEntry AS 'Entry Date',
FirstName AS 'First Name',
LastName As 'Last Name',
member_id as 'Member ID',
mobile AS 'Mobile',
Doctor AS 'Need help getting connected to a doctor',
CASE WHEN HealthConditions LIKE '%Asthma%' THEN 'Yes' ELSE 'No' END AS 'Asthma',
CASE WHEN HealthConditions LIKE '%COPD%' THEN 'Yes' ELSE 'No' END AS 'COPD',
CASE WHEN HealthConditions LIKE '%Cancer' THEN 'Yes' ELSE 'No' END AS 'Cancer',
CASE WHEN HealthConditions LIKE '%CHF%' THEN 'Yes' ELSE 'No' END AS 'CHF',
CASE WHEN HealthConditions LIKE '%Diabetes%' THEN 'Yes' ELSE 'No' END AS 'Diabetes',
CASE WHEN HealthConditions LIKE '%Hypertension (High Blood Pressure)%' THEN 'Yes' ELSE 'No' END AS 'Hypertension (High Blood Pressure)',
AdditionalConditionsDescription AS 'Additional Health Conditions',
MedicationQuestions AS 'Questions about meds',
InsuranceQuestionsDescription AS 'Healthcare concerns'
FROM UMHPSurvey.Assessment
where Doctor = 'Yes' or ConditionQuestions = 'Yes' or AdditionalConditions = 'Yes'
or MedicationQuestions = 'Yes' or Concerns = 'Yes'
INTO OUTFILE '$FILE'
FIELDS ESCAPED BY '\\'
OPTIONALLY ENCLOSED BY '\"'
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
EOFMYSQL
给出以下错误
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR at line 2: Unknown command '\"'.
我不知道自己做错了什么。
我也试过以下方法
FILE="/var/lib/mysql-files/ConditionAssessment.csv"
mysql --user='root' --password='xxxxxxxxxxxxxxx' UMHPSurvey << EOFMYSQL
SELECT
DateEntry AS 'Entry Date',
FirstName AS 'First Name',
LastName As 'Last Name',
member_id as 'Member ID',
mobile AS 'Mobile',
Doctor AS 'Need help getting connected to a doctor',
CASE WHEN HealthConditions LIKE '%Asthma%' THEN 'Yes' ELSE 'No' END AS 'Asthma',
CASE WHEN HealthConditions LIKE '%COPD%' THEN 'Yes' ELSE 'No' END AS 'COPD',
CASE WHEN HealthConditions LIKE '%Cancer' THEN 'Yes' ELSE 'No' END AS 'Cancer',
CASE WHEN HealthConditions LIKE '%CHF%' THEN 'Yes' ELSE 'No' END AS 'CHF',
CASE WHEN HealthConditions LIKE '%Diabetes%' THEN 'Yes' ELSE 'No' END AS 'Diabetes',
CASE WHEN HealthConditions LIKE '%Hypertension (High Blood Pressure)%' THEN 'Yes' ELSE 'No' END AS 'Hypertension (High Blood Pressure)',
AdditionalConditionsDescription AS 'Additional Health Conditions',
MedicationQuestions AS 'Questions about meds',
InsuranceQuestionsDescription AS 'Healthcare concerns'
INTO OUTFILE '$FILE'
FIELDS ESCAPED BY '\\'
OPTIONALLY ENCLOSED BY '\"'
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
FROM UMHPSurvey.Assessment
where Doctor = 'Yes' or ConditionQuestions = 'Yes' or AdditionalConditions = 'Yes'
or MedicationQuestions = 'Yes' or Concerns = 'Yes'
EOFMYSQL
给出同样的错误(如下
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR at line 2: Unknown command '\"'.
谁能帮我理解我哪里出错了?
因为你使用参数扩展来代替 $FILE
,在 "here document "里面也会有反斜杠引号。shell发送给MySQL的内容是这样的。
FIELDS ESCAPED BY '\'
试着把反斜杠双括号括起来。
FIELDS ESCAPED BY '\\\\'
你的其他反斜杠的使用是不受影响的,这让人很困惑,读一下吧。指南的一部分 仔细.要调试这里的文档,用cat替换你对mysql的调用。
cat - << EOFMYSQL