我在尝试查询ODBC CSV文件时遇到此问题。它出现了这个错误消息。我的计划是格式化日期,之后我会根据每个AC Serial上的每一天开始计数。
ERROR [07002] [Microsoft][ODBC Text Driver] Too few parameters. Expected 1.It is strange.
SELECT DSN, Format([Date Time], "yyyy-MM-dd")
From a1.csv
Group by [DSN],Format([Date Time], "yyyy-MM-dd");`
答案 0 :(得分:1)
我认为问题是输入FORMAT
的格式不会被解释为实际的DATETIME值,而是解释为字符串,因此declare @1 TABLE (DSN INT , timestamp VARCHAR(64) ) ;
insert into @1 VALUES (123 , '10/02/2018 12:20:00'),
(123 , '13/02/2018 22:20:00'),
(123 , '13/02/2018 22:20:00'),
(124 , '13/02/2018 22:20:00'),
(124 , '14/02/2018 22:20:00'),
(124 , '14/02/2018 22:20:00') ;
select DSN , (SUBSTRING(timestamp,7,4) + '-' +
SUBSTRING(timestamp,4,2) + '-' +
SUBSTRING(timestamp,1,2) ) AS BLABLA
函数的使用不起作用。
我对我的假设作了简要的检查,并尝试了这个,这对我有用(虽然没有检查分组):
DSN BLABLA
123 2018-02-10
123 2018-02-13
123 2018-02-13
124 2018-02-13
124 2018-02-14
124 2018-02-14
来自@ 1;
结果:
i
答案 1 :(得分:1)
我相信您的问题是您在日期格式周围使用双引号而不是单引号。 ODBC对SQL变体的容忍度较低。
答案 2 :(得分:0)
对于那些可能有类似问题的人。如果可能,最好使用OLEDB而不是使用ODBC作为数据源.OLEDB连接字符串如下:
private void registerOnTickReceiver() {
mMinuteTickReceiver = new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent){
Intent timeTick=new Intent(LifeTimerClockWidget.ACTION_TICK);
// for Android 8 send an explicit broadcast
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
sendImplicitBroadcast(context, timeTick);
else
sendBroadcast(timeTick);
}
};
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_TIME_TICK);
filter.addAction(Intent.ACTION_SCREEN_ON);
registerReceiver(mMinuteTickReceiver, filter);
}
现在正在运行的SQL代码是: