Sql 从值以1开头的列中选择

Sql 从值以1开头的列中选择,sql,sql-server,Sql,Sql Server,我有一张桌子 id val1 a 199.87 b 166.56 c 100.67 d 233.45 e 177.23 我想选择val1以1开头的行 SELECT * FROM Table_1 WHERE val1 LIKE '1%' val1以19开头的行 SELECT * FROM Table_1 WHERE val1 LIKE '19%' 在SQL Server中是否有任何方法可以做到这一点 val1的数据类型是floa

我有一张桌子

id    val1
a      199.87
b      166.56
c      100.67
d      233.45
e      177.23
  • 我想选择
    val1
    以1开头的行

  • SELECT
      *
    FROM Table_1
    WHERE val1 LIKE '1%'
    
  • val1
    以19开头的行

  • SELECT
      *
    FROM Table_1
    WHERE val1 LIKE '19%'
    
    在SQL Server中是否有任何方法可以做到这一点


    val1的数据类型是float。

    在筛选从表中选择的结果时,您可以简单地使用
    LIKE%
    条件,如下所示

    SELECT * FROM TABLE_NAME WHERE STR(VAL1, 10, 5) LIKE '19%'
    
    每当我选择一个包含特定字符的行或一个包含值的列的数字时,这对我来说是有效的


    编辑:用于将数字数据转换为字符数据的函数。

    您可以在where子句中使用
    转换
    转换
    函数将
    浮点
    转换为
    字符
    数据类型。下面的查询将生成您想要的结果

    select * from table1
    where convert(varchar,val) like '1%';
    
    select * from table1
    where cast(val as char(10)) like '1%';
    
    你可以使用上面的任何一个

    结果

    id  val
    -----------
    a   199,87
    b   166,56
    c   100,67
    e   177,23
    
    要像
    19
    一样返回
    val
    ,只需将
    1
    替换为
    19


    您可以检查演示

    如果您的数据值永远不会超过200,则最好不要仅为了回答此查询而将其转换为其他数据类型。相反,将其作为浮动,并使用范围比较对其进行评估

    SELECT * FROM t WHERE val1 >= 100 AND val1 < 200
    
    从t中选择*,其中val1>=100且val1<200
    
    同样,对于19x.xx值,将其设置为
    =190

    尽可能避免转换数据;它增加了影响查询性能的开销,也意味着不能使用索引-这会严重影响查询的性能

    1)我想选择val1以1开头的行

    SELECT
      *
    FROM Table_1
    WHERE val1 LIKE '1%'
    

    2) val1以19开头的行

    SELECT
      *
    FROM Table_1
    WHERE val1 LIKE '19%'
    

    使用like运算符获取结果。无需转换Val1的数据类型

  • val1以1开头的行:
  • 从T中选择*其中val1类似于“1%”

  • val1以19开头的行:

  • 从T中选择*其中val1类似于“19%”

    这个问题已经有很多很好的答案,下面的答案是另一种方法

    create table table1(
        id char(10),
        val float
    
    );    
    
    insert into table1 values('a',199.87);
    insert into table1 values('b',166.56);
    insert into table1 values('c',100.67);
    insert into table1 values('d',233.45);
    insert into table1 values('e',177.23);
    
    
    
    Query
    select * from table1 where (CHARINDEX( '1',val, 1))=1;
    select * from table1 where (CHARINDEX( '19',val, 1))=1;
    
    output 
        id  val
        a           199,87
        b           166,56
        c           100,67
        e           177,23
    
        id  val
        a           199,87
    

    你不应该像使用浮点数一样使用
    -首先将其转换为字符串类型。你是对的,很抱歉忘了先将其转换为字符串,所以它不会派上用场。谢谢您的更正。请随意编辑您的答案以包含此信息。您可以添加一些关于数据目的和意义的背景信息吗?转换为varchar会使查询不可搜索。当然,在上一个查询中,第一个谓词是redundantCaution,但这会导致无法在上使用任何索引val1@CaiusJard:是的,如果没有你在回答中提到的其他方法,则应进行转换。谢谢你的提示:-)。