Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 这里有文本到数字的转换吗?_Mysql_Sql_Select_Types_Decimal - Fatal编程技术网

Mysql 这里有文本到数字的转换吗?

Mysql 这里有文本到数字的转换吗?,mysql,sql,select,types,decimal,Mysql,Sql,Select,Types,Decimal,我有一个表,其中有一列金额,类型为DEC 以下查询有效: 从金额小于“1”的mytable中选择* 从mytable中选择*其中金额='1.5' 也就是说,即使我使用引号,比如数量是字符值(尽管它们实际上是数字),查询仍然有效 我的问题是: 这是因为SQL Server“理解”数据类型实际上是一个数字,并且在执行SQLselect 或 SQL server首先将金额值转换为文本,然后进行比较?因此这会由于转换而产生性能开销?是的,会发生数字转换,因为列“金额”定义为数字。要测试这一点,您可以尝试

我有一个表,其中有一列
金额
,类型为
DEC

以下查询有效:
从金额小于“1”的mytable中选择*

从mytable中选择*其中金额='1.5'

也就是说,即使我使用引号,比如
数量
是字符值(尽管它们实际上是数字),查询仍然有效

我的问题是:
这是因为SQL Server“理解”数据类型实际上是一个数字,并且在执行SQL
select



SQL server首先将
金额
值转换为文本,然后进行比较?因此这会由于转换而产生性能开销?

是的,会发生数字转换,因为列“金额”定义为数字。要测试这一点,您可以尝试:

SELECT * FROM mytable WHERE amount < '1a'; 

这意味着varchar正在被转换为数字,而不是相反。

SQL了解
amount
是表设计中的一个数字,并在“1”中寻找一个数字值,而不必费心去“理解”是否可转换。@enb081:
在“1”中查找数值是什么意思?
这不意味着转换吗?MySQL强制将给定值转换为与列相同的类型。您发布的错误消息来自Microsoft SQL Server。这个问题被标记为MySQL,因为在不同的RDBMS中运行这样的测试是毫无意义的,不会回答这个问题。实际上,MySQL中的IIRC将被隐式转换为
1
,并丢弃非数字字符,不会生成错误。。按照这个答案的逻辑会得出错误的结论。“没有错误并不意味着强制转换是从decimal到varchar。我不是问题的询问者。@enb081:所涉及的DBMS确实起到了作用——特别是如果它是MySQL,并且进行了中断类型检查。”。您的示例应该给出一个错误,但在MySQL上没有给出。如果您更改

Msg 8114, Level 16, State 5, Line 1
Error converting data type varchar to numeric.