sqlite查询中的字符串格式

时间:2017-06-23 10:40:23

标签: android sqlite android-sqlite string.format strftime

在我的select查询中,我使用string.format作为where子句。 当我在格式中有strfTime时,我会收到错误。

select = String.format(Locale.US, "SELECT %d AS %s, CAST(strftime('%s', START)  AS  integer) AS %s",
                    SORT_ID, SORT_ORDER_ID, SORT_ORDER_DATE);

// select =“SELECT”+ SORT_ID +“AS SORT_ORDER_ID,CAST(strftime('%s',START)AS整数)AS SORT_ORDER_DATE”;

没有string.format的注释行有效。但是当我添加string.format时,我得到 MissingFormatArgumentException:格式说明符'%s'

2 个答案:

答案 0 :(得分:1)

您的格式字符串

"SELECT %d AS %s, CAST(strftime('%s', START) AS integer) AS %s"

  1. %d
  2. %s
  3. %s
  4. %s
  5. <强>参数

    1. SORT_ID
    2. SORT_ORDER_ID
    3. SORT_ORDER_DATE
    4. <强>问题

      您的格式需要四个参数。但是您只提供三个参数。纠正这个。

      我认为缺少最后一个别名AS %s的参数

      其他-问题

      CAST(strftime('%s', START)这不是格式化的字符串。

      试试这个。

      String QUERY_INTEGER = "CAST(strftime('%s', START)";    
      select = String.format(Locale.US, "SELECT %d AS %s, %s  AS  integer) AS %s",
                      SORT_ID, SORT_ORDER_ID, QUERY_CAST, SORT_ORDER_DATE);
      

答案 1 :(得分:1)

format()函数使用%作为替换标记;它需要%s调用中strftime()的字符串。

但您不希望将其替换为format()。 要让format()输出单个%字符,您必须通过在格式字符串中加倍来转义它:

String.format("... strftime('%%s', START) ...", ...);