Вы не можете преобразовать десятичное представление varchar
непосредственно в int
(SELECT CONVERT(int, '0.27');
потерпит неудачу с той же ошибкой). Вам нужно CONVERT
сначала значение decimal
, а затем int
. Итак, для вашего запроса:
SELECT POWIERZCHNIA,
CONVERT(int,CONVERT(decimal(3,2),REPLACE(POWIERZCHNIA, ',', '.')))
FROM v_analiza_cechy_produktow;
Обратите внимание, что я использовал decimal(3,2)
, поскольку у нас есть только одно значение выборки '0.27'
. вам скорее всего нужно будет выбрать другой масштаб и точность.
Это, однако, задает вопрос; почему вы храните десятичные значения как varchar
?
Подходящей формулой на основе вашего примера будет
=COLUMN(MyTable[C])-COLUMN(MyTable)+1
Первая часть forumla COLUMN (MyTable [C])
вернет номер столбца указанного столбца. .
Вторая часть формулы COLUMN (MyTable) всегда возвращает номер первого столбца таблицы.
Сделайте Вы имеете в виду:
Dim r As Range
MyLetter ="AA"
Set r = Range(MyLetter & "1")
MyIndex= r.Column
Комментарий ре редактирования
Function GetRelativeColumn(Letter, RangeName)
Dim r As Range
Dim ColStart, ColRequired, ColTemp
Set r = Range(RangeName)
ColStart = r.Column
ColRequired = Range(Letter & "1").Column
ColTemp = ColRequired - ColStart + 1
If ColTemp < 1 Or ColTemp > r.Columns.Count Then
MsgBox "Ooutside range"
Else
GetRelativeColumn = ColTemp
End If
End Function
Вы могли использовать: =COLUMN(MyTable[
, где *
]) - COLUMN(MyTable[A]) + 1*
столбец, индекс которого Вы хотите.
= небольшие изменения в ответах eJames: = COLUMN (MyTable [*]) - MIN (COLUMN (MyTable)) + 1, где * - столбец, для которого требуется индекс.