当前位置: 首页 > 知识库问答 >
问题:

在存储过程Round()函数中将varchar(255)转换为浮点?

公羊绪
2023-03-14

我有一个存储过程需要对varchar(255)datatype进行取整。在尝试对该数据类型进行round时,我得到了错误

将数据类型varchar转换为float时出错

因此,我尝试在round函数中将varchar(255)转换为float。我已附加了我的存储过程。有3例。[paramvalue]列中的值可以是“101.667483932”、“27.63749569”等。。。我需要把它们四舍五入到1位小数,然后是2位小数。这不是绕过[paramvalue]列的合适方法吗?

ALTER PROCEDURE [dbo].[ReportParameters]
        @StartTime datetime
        ,@EndTime datetime
        ,@UniqueID varchar(155)
AS
BEGIN

SELECT DISTINCT PA.[uniqueid]
      ,PA.[paramname]
      ,(SELECT PH.recipephase FROM BHPhase PH WHERE PH.uniqueid = PA.uniqueid AND PA.eventtime > PH.starttime AND PA.eventtime <= PH.endtime) AS Phase
      ,PA.[eu]
      ,CASE 
        WHEN PA.[eu] = 'pH' THEN ROUND (CONVERT(float, PA.[paramvalue]), 1)
        WHEN PA.[eu] = 'KG' THEN ROUND (CONVERT(float, PA.[paramvalue]), 1)
        WHEN PA.[eu] = 'mL/min' THEN ROUND (CONVERT(float, PA.[paramvalue]), 2)
        ELSE PA.paramvalue
       END
      ,PA.[paramtype]
      ,PA.[recipe]
      ,PA.[area]
      ,PA.[eventtime]
      ,PA.[userid]
FROM [BatchHistoryEx].[dbo].[BHParameter] PA
WHERE [eventtime] >= @StartTime AND [eventtime] <= @EndTime
AND PA.[paramtype] = 'Report'
AND PA.[uniqueid] = @UniqueID
ORDER BY [eventtime] ASC

End

共有1个答案

和弘博
2023-03-14

您可以使用TRY\u CONVERT()

(CASE WHEN PA.[eu] = 'pH' THEN ROUND(TRY_CONVERT(float, PA.[paramvalue]), 1)
      WHEN PA.[eu] = 'KG' THEN ROUND(TRY_CONVERT(float, PA.[paramvalue]), 1)
      WHEN PA.[eu] = 'mL/min' THEN ROUND(TRY_CONVERT(float, PA.[paramvalue]), 2)
      ELSE PA.paramvalue
 END)
 类似资料:
  • 问题内容: 我从表(源)中进行操作,其中每一列都是数据类型。 列之一存储二进制数据,例如 我在其中插入目标表的列具有相同的列,但数据类型为。 当我插入它时,然后选择目标表,我从该列中得到了一个不同的值: 它看起来似乎并不真正具有相同的价值。 什么应该是转变作为二进制数据存储的正确方法,以列? 问题答案: 您得到的结果是因为字符串“0003f80075177fe6”(一个值)被转换为代码点,并且这些

  • 问题内容: 我试图在我的数字列中附加一些alphabt来获取记录。但即时通讯收到错误,我尝试了强制转换和转换功能。 例如 这里StandardCost是一个数字字段,但是当我获取记录时遇到错误,请看看。 问题答案: 我认为应该 或者

  • 我有数字,我想在存储过程中将这些数字转换成字符串。 请回复。 谢谢!

  • 问题内容: 我在下面的查询中,需要转换为 架构图 我尝试了什么 但它们不起作用。请提出建议。 问题答案: 您将需要或作为数据类型,没有可以将数据强制转换/转换为以下数据的数据类型: 请参阅下面的SQL(实际上)在SQL Fiddle中 : 除了您试图转换为不正确的数据类型外,您所使用的语法也不正确。该函数使用以下列或值: 要么 您的原始查询的语法向后。

  • 问题内容: 我已经将包含字符串值(例如吃)和浮动值(例如0.87)的CSV文件导入到phpMyAdmin数据库的表中。获得所有字符串值并仅保留具有十进制值的行后,需要将此类值从VARCHAR转换为DECIMAL / FLOAT,以便可以对该属性执行MAX()。 我该怎么做呢?每次我尝试通过phpMyAdmin中的GUI进行此操作时,我所有的值都会自动四舍五入为0和1s。 请帮我! 问题答案: 我认

  • 问题内容: 有点像这个问题,但是相反。 给定类似,或的字符串,将其转换为浮点数的最佳方法是什么?我正在考虑根据情况使用正则表达式,但是也许有人知道更好的方法或预先存在的解决方案。我希望可以使用,但是我认为第3种情况可以避免这种情况。 问题答案: 我稍微调整了詹姆斯的回答。 http://ideone.com/ItifKv