select rtrim(substring(beizhu,iif(CHARINDEX('留言:',beizhu)=0 ,10000,CHARINDEX('留言:',beizhu)),200)) from ysb_ddhz where djbh=a.dsdd) as EC_REMARK;请帮我看下或者失去了
时间: 2023-10-09 19:06:07 浏览: 61
这段代码有两个问题:
1. 变量 `a` 没有定义,应该先定义 `a` 并赋值。
2. 在 `substring` 函数中,`iif` 函数的第一个参数是判断条件,如果 `CHARINDEX('留言:',beizhu)` 返回 0 的话,会导致 `substring` 函数抛出异常,应该使用 `case` 函数来避免这个问题。
修正后的代码如下:
```
select rtrim(substring(beizhu, case when CHARINDEX('留言:',beizhu) = 0 then 10000 else CHARINDEX('留言:',beizhu) end, 200)) as EC_REMARK
from ysb_ddhz
where djbh = a.dsdd;
```
相关问题
编程要求 按要求补全右侧代码中的where()和select()部分。 提示:请参考注释中提供的步骤。 注意:sql语句的连接词and和where在于其它字符串连接时,前后要有空格。把查询条件拼接到SQL语句时,要求查询的属性为全部属性,即select *。 评测说明 平台将自动编译补全后的代码,接着根据程序的输出判断程序是否正确。 测试程序为: $student =new model('student'); $where = array( array('id','3','>='), //表示查询“id >= 3”的数据 array('gender','女','='), //表示查询“gender = 女”的数据 ); $res = $student->where($where)->select(); var_dump($res); 所用到的数据已经保存在平台的数据库中。
```php
class model {
private $table;
public function __construct($table) {
$this->table = $table;
}
public function where($where) {
$sql = "SELECT * FROM " . $this->table . " WHERE ";
foreach ($where as $item) {
$sql .= $item[0] . " " . $item[2] . " '" . $item[1] . "' AND ";
}
$sql = rtrim($sql, "AND ");
$this->sql = $sql;
return $this;
}
public function select() {
$link = new mysqli('localhost', 'root', '123123');
$link->query('set names utf8');
$link->query('use itcast');
$res = $link->query($this->sql);
$result = array();
while ($row = $res->fetch_assoc()) {
$result[] = $row;
}
return $result;
}
}
```
在本例中,`where()` 方法使用了 `$where` 参数来指定查询条件。该参数是一个二维数组,每个子数组都包含三个元素:属性名、属性值和比较操作符。使用 `SELECT *` 查询所有属性。在 `where()` 方法中,将查询条件拼接到 SQL 语句中,并存储在类的 `$sql` 成员变量中。需要注意的是,SQL 语句中的 `AND` 连接词前后需要有空格,可以使用 `rtrim()` 函数去掉 SQL 语句中最后的 `AND` 和空格。最后,使用 `select()` 方法执行查询操作,并将结果返回。
String sql = "select ZYName,YLName,YDY,YX,GX,ZhongYao.ZZ as ZZ from Yaolei,ZhongYao where Yaolei.YLID=ZhongYao.YLID and LTRIM(RTRIM(ZYName))='?'"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1,name); org.apache.jasper.JasperException: javax.servlet.ServletException: com.microsoft.sqlserver.jdbc.SQLServerException: 索引 1 超出范围。
在这段代码中,你使用了一个带有参数的SQL查询语句,并且使用了PreparedStatement来设置查询参数。然而,在这个错误信息中,它提示了“索引 1 超出范围”的错误,这通常是由于在设置参数时出现了问题。
具体来说,你在代码中使用了一个占位符“?”,然后在PreparedStatement中调用了setString方法来设置参数。但是,在这个方法中,你需要指定占位符的位置,也就是参数的索引。因为你只有一个占位符,所以参数的索引应该是1,但是错误提示中却提示了“索引 1 超出范围”,这说明你可能没有正确设置参数的位置。
解决这个问题的方法是,确保你在调用setString方法时,指定的参数索引与查询语句中占位符的位置一致。在这个例子中,应该将setString方法的参数改为1,像这样:
```
pstmt.setString(1, name);
```
这样就可以正确设置查询参数,避免“索引超出范围”的错误。
阅读全文