我正在尝试使用下面的查询将一组连接的转换整数插入到字符串中,以便在我的表中的datetime
字段中使用。
表
Field Type
empID int(11)
time_stamp datetime
in_out char(3)
am_pm char(2)
QUERY
Dim query As String = "INSERT INTO attendance VALUES(" & empID.Text & _
"STR_TO_DATE(CONCAT("& empYear.Text & ",'-'," & empMonth.Text & ",'-'," & _
empDay.Text & ",' '," & empHour.Text & ",':'," & empMin.Text & ",':'," & _
empSec.Text & ",'%Y-%m-%d %H:%i:%s'),'out','pm')"
连接和值没有问题。我试图将值插入到字符串类型的test
列中,输出为:
133201712311827
我非常确定如何使用这些字符:'' "" "," - :
。我无法弄清楚如何。
答案 0 :(得分:1)
我看到的第一个问题,这里
& empID.Text & "STR_TO_DATE(. . . .
您在第一个值
后缺少逗号& empID.Text & "***,*** STR_TO_DATE(. . . .
第二个问题,我确定何时用硬编码值替换了您的文本值 - 您缺少str_to_date
的右括号。此处,'%Y-%m-%d...
应为), '%Y-%m-%d...
STR_TO_DATE(CONCAT(1999,'-',01,'-',01,' ',10,':',25,':',30***)***,'%Y-%m-%d %H:%i:%s')
如您所见 - 我的替换表明您没有串联问题,单引号和:
。这里只有其他变量是文本框中的数据质量。
<强>更新强>
这个答案(上面)是正确的。使用sql小提琴我创建了模式,当用硬编码替换文本框值时 - 全部工作。我添加逗号和括号的建议成立。您对单引号问题的主张是错误的。
create table xxx (empID int(11), time_stamp datetime, in_out char(3), am_pm char(2));
INSERT INTO xxx VALUES(123,
STR_TO_DATE(CONCAT('2017','-','1','-','23',' ','10',':','35',':','40'),'%Y-%m-%d %H:%i:%s'),
'out','pm');
commit;
Select * from xxx
empID | time_stamp | in_out |上午下午
123 | 2017年1月23日10:35:40 |出|下午
结束更新
最重要的是,你可以通过参数化做得更好,这看起来像这样
command.CommandText = "insert into ... values (@1, @2, @3, @4)"
command.Parameters.AddWithValue("@1", Convert.ToInt32(empID.Text))
dim date as new DateTime(Convert.ToInt32(empYear.Text), Convert.ToInt32(empMonth.Text), . . . . )
command.Parameters.AddWithValue("@2", date)
. . . . . .
command.ExecuteNonQuery()
参数化可以轻松处理日期和字符串