① sql取字段中某一部分特定数值
如果只是固定取"20/30"比较容易, 只需找到"20/30"在此字符串的开始位置,再截取5个字符的长度就可以了,如:
SELECT CASE WHEN CHARINDEX('mgdf13hj44jjjgasetrxzc20/30nj5weyu45f5645gjhkdfjkg', '20/30') > 0 THEN SUBSTRING('mgdf13hj44jjjgasetrxzc20/30nj5weyu45f5645gjhkdfjkg', CHARINDEX('mgdf13hj44jjjgasetrxzc20/30nj5weyu45f5645gjhkdfjkg', '20/30'),5) ELSE '' END
如果不一定是20/30,而是与"/"前后关联的数字(eg: 14/20, 33/66,等...),就麻烦了,你可能需要写一个抽取字符串的函数,如: f_substr(),然后在SQL里调用:
select 用户.f_substr('mgdf13hj44jjjgasetrxzc20/30nj5weyu45f5645gjhkdfjkg')
② 请教SQL如何选择一个字段里某一部分的方法
一楼的是固定长度的
要是之前或之后长度都不固定,可以这样写
instr(str,'/',0,-1)找到'/'的位置
select
subStr(
str
,instr(str,'/',1,1)-2
,5)
from
……
这句话是取/附近5个字符的代码!
有此数据库不支持instr可以用:
CHARINDEX
③ sql如何按时间段选择部分字段
字段选好的话,直接在where语句里面添加个时间条件就可以了啊,oracle 里面直接添加一个,不过前提是你有时间这个字段,下面假设你的时间叫做 oper_date吧
select
字段1,
字段2
from 表 t
where t.oper_date >to_date('2012-02-01 00:00:00','yyyy-MM-dd HH24:mi:ss')
and t.oper_date < to_date('2012-02-29 23:59:59','yyyy-MM-dd HH24:mi:ss')
这个是oracle下的,DB2下的就用timestamp就行了
④ sql 如何选择数值大于80%的部分
如果你那些百分数<= 99%
可以直接执行
select * from xxx where b>'80%' ;
如果有130%等
使用:
select * from (select tmp.*,to_number(substr(b,0,instr(b,'%')-1)) c from table tmp) where c>80
⑤ SQL 条件只选择一个
如果是 SQL Server 或 Access:
select top 1 ...
如果是 MySql:
select ... limit 1
⑥ 如何筛选SQL字符串字段中部分值
如果需要筛选SQL字符串字段中部分值,应该怎么做呢?下面就教您筛选SQL字符串字段中部分值的记录的方法,供您参考。例如有一个KKBH(卡口编号)字段,这是一个字典字段(对应另一个实体表(卡口表)的编号字段)。这个字段的值保存所属卡口值域{01,02,03}本来想到的是通过or来实现,这样需要动态生成SQL语句。后来想到一个办法用charindex搜索SQL字符串的办法。将所有的要查的卡口编号组成类似'01@02'这样待查字符串。sql查询时通过charindex筛选出在待查SQL字符串里有的KKBH的记录。经测试使用or与使用charindex,两者在MSSQL中执行效率差不多。具体实现:用户界面查询需求:可能搜索N个卡口的记录(N的值域{1,所有卡口个数})。设计这个UI的形式一共三种:一、一个多选listbox。用户界面运行时将卡口字典表载入listbox信息。二、两个listbox,左边为待选,右边为已选,中间加两个按钮添加与删除。用户界面运行时将卡都字典表载入左边的listbox。三、多个Checkbox。可以在界面设计阶段直接做死字典表,即有几个卡口就话几个checkbox。或者在程序运行根据字典表绘制动态绘制checkbox。UI的优缺点这里不讨论,我这里选择第三种方式的动态绘制。在查询阶段根据所选卡口生成待选SQL字符串入:"01@02”并将此条件传回后台查询服务程序后台查询服务里只要待查SQL字符串作为参数传入查询的SQL语句中(sql片段): charindex(卡口编号,@待查字符串)。当然也可以手动生成SQL方式传入"charindex(卡口编号,'"+待查字符串+"')".
⑦ sql从查询结果中选择中间某部分记录
我说1个笨方法哈
select top 300 * into #table from table order by 排序条件
delete top 199 * from #table order by排序条件
select * from #table order by 排序条件
说明:
这是用虚拟表写的,方法比较笨,简单的铁定会有,你多想想
我是采取取出来目的记录,然后过滤掉不要的记录,剩下的就是你想要的了
因为你是要200~300条,所以必须要有按什么来排序的条件,排序不同,结果也不同的
你试试,OK,请采纳
⑧ sql 选取字段中某段字符,
如果这个字段是有规律的,看图视乎是 开始4个字符+t +3个数字 +t,要获取2t之间的3个数字比较容易
select SUBSTRING(PRD_NO,6,3) from PRDT; 从第6个字符开始截取3个字符
如果没有固定规律就比较麻烦了。
⑨ SQL 多条件,任意选择 查询方法
实例 public java.util.List<Operator> selectOperatorsConditions(
HashMap<String, String> conditions, Connection conn) {
// 根据条件进行查询操作员信息
java.util.List<Operator> operatorsByCondition = new ArrayList<Operator>(); StringBuffer sql = new StringBuffer(
"select operator_id,operator_name,is_admin from t_operator"); if (conditions.size() > 0) {
sql.append(" where ");
Iterator<String> keyset = conditions.keySet().iterator();
while (keyset.hasNext()) {
String cols = (String) keyset.next();
sql.append(cols + " = '" + conditions.get(cols) + "' and ");
}
sql.delete(sql.lastIndexOf("and"), sql.length());
}
Statement st = null;
ResultSet rs = null;
try {
if (conn != null) {
st = conn.createStatement();
rs = st.executeQuery(sql.toString()); while (rs.next()) {
Operator operator = new Operator(rs.getString(1), rs
.getString(2), rs.getString(3));
operatorsByCondition.add(operator);
}
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return operatorsByCondition;
}