PDA

View Full Version : پیدا کردن بزرگترین مقدار در یک فیلد



sara_t
سه شنبه 28 مرداد 1393, 09:52 صبح
سلام دوستان

من یه فیلد دارم که توش اعداد رو با حروف نوشتم میخام بزرگترین اون رو پیدا کنم فیلد من استرینگ هست. مثلا d1320
d1321
d999
ممنون میشم راهنمایی بفرمایید

kahe.mehrdad
سه شنبه 28 مرداد 1393, 10:51 صبح
دوست من شما به جز اینکه این ستون را ببرید سمت کد و مقدار Int هر رشته را در بیارید و مقایسه انجام بدید به نظر من راهی نیست. چون اگه شما مقایسه را انجام بدید میاد بر حسب همون کاراکتر اول alphabetic این ستونتون را مرتب میکنه. البته اگر کاراکتر اولتون فقط d هست و ثابت میمونه همین روش جواب میده چون کد اسکی کاراکتر اعداد هم به ترتیب بالا میره یعنی کد اسکی 1 ار کد اسکی 9 کمتره. یه order by بزنید ببینید چی میشه.

sara_t
سه شنبه 28 مرداد 1393, 11:07 صبح
نه D1000 رو به عنوان جواب میگیره

kahe.mehrdad
سه شنبه 28 مرداد 1393, 11:14 صبح
خوب باید هم همین باشه. چون کد اسکی D از d بیشتره. با چه زبانی کد مینویسید؟؟

Davidd
سه شنبه 28 مرداد 1393, 11:15 صبح
اگه فقط كاراكتر اول حروفه :
select max(cast(substring(columnName,2,len(columnName)) as int))from tableName

sara_t
سه شنبه 28 مرداد 1393, 11:26 صبح
ممنون اما اگه مثلا فیلد dd12 هم داشته باشم اونوقت نمیتونم به روش شما سرچ کنم.

s.karim
سه شنبه 28 مرداد 1393, 11:28 صبح
SELECT * FROM MyTable ORDER BY CAST((SELECT dbo.fnGetNumberFromString(MyCol)) AS INTEGER)



CREATE FUNCTION dbo.fnGetNumberFromString (@strInput VARCHAR(255))
RETURNS VARCHAR(255)
AS
BEGIN
DECLARE @intNumber int
SET @intNumber = PATINDEX('%[^0-9]%', @strInput)

WHILE @intNumber > 0
BEGIN
SET @strInput = STUFF(@strInput, @intNumber, 1, '')
SET @intNumber = PATINDEX('%[^0-9]%', @strInput)
END

RETURN ISNULL(@strInput,0)
END
GO