错误[07002] [Microsoft] [ODBC文本驱动程序]参数太少。预期1

时间:2018-06-13 11:36:22

标签: sql csv odbc

enter image description here我在尝试查询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");`

3 个答案:

答案 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代码是: